NumPy中zeros_like()函数的使用及说明

 更新时间:2025年10月20日 08:40:08   作者:Geoking.  
本文介绍了NumPy的numpy.zeros_like()函数,包括其用法、参数、与numpy.zeros()的区别,以及在科学计算、机器学习等领域的应用场景,强调其能够简便高效地创建与现有数组形状和类型相同的全零数组

在数据分析、机器学习与科学计算中经常需要创建一个与现有数组形状相同、但值全为零的新数组。

这时,NumPy 提供了一个非常方便的函数 —— numpy.zeros_like()

当想要一个“和现有数组一样大,但全是零”的数组时,记得用 zeros_like()

本文将深入介绍它的用法、参数、应用场景以及与 numpy.zeros() 的区别。

一、函数简介

numpy.zeros_like() 是 NumPy 提供的一个用于创建零数组的函数。

它根据给定的数组(或类数组对象)创建一个形状、类型相同的新数组,但所有元素都被初始化为 0

numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)

官方文档介绍地址numpy.zeros_like

二、参数详解

参数名说明默认值
a用作模板的数组或类数组对象必填
dtype指定返回数组的数据类型默认为 a的数据类型
order内存布局方式:'C'(行优先)或 'F'(列优先)'K'(保持与 a一致)
subok若为 True,则子类保持原类型;否则返回 np.ndarrayTrue
shape可选,用于重新指定形状None

三、基本用法示例

示例 1:最简单的用法

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.zeros_like(a)

print("原数组 a:\n", a)
print("zeros_like 生成的新数组 b:\n", b)

输出:

原数组 a:
 [[1 2 3]
  [4 5 6]]
zeros_like 生成的新数组 b:
 [[0 0 0]
  [0 0 0]]

会发现:

  • ba 的形状完全一致
  • 元素类型(dtype)也相同
  • 所有元素都为 0

示例 2:指定数据类型

b = np.zeros_like(a, dtype=float)
print(b)

输出:

[[0. 0. 0.]
 [0. 0. 0.]]

小技巧:当希望创建一个浮点型零矩阵(如在神经网络中初始化权重),可以通过 dtype=float 实现。

示例 3:指定不同形状

b = np.zeros_like(a, shape=(3, 3))
print(b)

输出:

[[0 0 0]
 [0 0 0]
 [0 0 0]]

虽然参考了 a,但通过 shape 参数指定了一个新的形状 (3, 3)

示例 4:处理多维数组

tensor = np.arange(24).reshape(2, 3, 4)
zeros_tensor = np.zeros_like(tensor)

print("原数组形状:", tensor.shape)
print("zeros_like 结果形状:", zeros_tensor.shape)

输出:

原数组形状: (2, 3, 4)
zeros_like 结果形状: (2, 3, 4)

非常适合在深度学习中创建梯度矩阵缓存变量

四、与numpy.zeros()的区别

函数创建方式形状来源常用场景
numpy.zeros(shape)手动指定形状由参数提供创建全零数组
numpy.zeros_like(a)基于参考数组继承自数组 a创建相同结构的零数组

示例对比

a = np.arange(6).reshape(2, 3)
z1 = np.zeros((2, 3))
z2 = np.zeros_like(a)

print(z1)
print(z2)

输出结果相同,但 z2 的创建过程更简洁,更安全(不易出错)。

五、性能分析

import numpy as np
import time

a = np.random.rand(1000, 1000)

# zeros
start = time.time()
z1 = np.zeros(a.shape)
print("zeros 耗时:", time.time() - start)

# zeros_like
start = time.time()
z2 = np.zeros_like(a)
print("zeros_like 耗时:", time.time() - start)

两者性能非常接近,但 zeros_like() 避免了显式指定形状,代码更简洁、更可维护。

六、实际应用场景

  1. 矩阵运算初始化
result = np.zeros_like(matrix)
  1. 神经网络梯度缓存
grad_W = np.zeros_like(weights)
  1. 掩码操作或图像处理
mask = np.zeros_like(image, dtype=bool)
  1. 科学计算的占位符数组
temp = np.zeros_like(data, dtype=float)

七、总结

特性zeros_like()
功能创建一个与给定数组形状和类型相同的零数组
优点简洁、安全、自动继承 dtype 与 shape
常见用途初始化、占位、缓存矩阵、图像掩码

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python中验证IP地址的方法详解

    Python中验证IP地址的方法详解

    IP 代表互联网协议,是分配给每台连接到互联网的计算机的唯一地址,本文将为大家简单介绍一下在 Python 中验证 IP 地址的相关方法,需要的小伙伴可以了解下
    2025-08-08
  • python 读取修改pcap包的例子

    python 读取修改pcap包的例子

    今天小编就为大家分享一篇python 读取修改pcap包的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 如何解决django-celery启动后迅速关闭

    如何解决django-celery启动后迅速关闭

    在本篇文章里小编给大家整理的是关于django-celery启动后迅速关闭的解决方法,有需要的朋友们学习下。
    2019-10-10
  • python编写扎金花小程序的实例代码

    python编写扎金花小程序的实例代码

    这篇文章主要介绍了python编写扎金花小程序的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python爬虫入门教程02之笔趣阁小说爬取

    Python爬虫入门教程02之笔趣阁小说爬取

    这篇文章主要介绍了Python爬虫入门教程02之笔趣阁小说爬取,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • pytorch中使用cuda扩展的实现示例

    pytorch中使用cuda扩展的实现示例

    这篇文章主要介绍了pytorch中使用cuda扩展的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Python callable函数使用方法详解

    Python callable函数使用方法详解

    这篇文章主要介绍了Python callable函数使用方法,一个可callable的对象是指可以被调用执行的对象,并且可以传入参数, 用另一个简单的描述方式,只要可以在一个对象的后面使用小括号来执行代码,那么这个对象就是callable对象,下面来详细介绍使用方法,需要的朋友可以参考下
    2024-10-10
  • Python基于Socket实现简易多人聊天室的示例代码

    Python基于Socket实现简易多人聊天室的示例代码

    这篇文章主要介绍了Python基于Socket实现简易多人聊天室的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python中一行和多行import模块问题

    Python中一行和多行import模块问题

    我们通过本篇文章给大家分析了为什么Python不建议使用一行import所有模块的原因,有兴趣的朋友学习下。
    2018-04-04
  • Python实现日志文件的自动轮转与定期清理

    Python实现日志文件的自动轮转与定期清理

    在进行项目开发时,合理的日志管理对于系统的稳定运行至关重要,良好的日志记录不仅能够帮助开发者快速定位问题,还能有效提升用户体验,本文将结合实际案例探讨如何在Python中通过编程手段实现日志文件的自动轮转与定期清理,需要的朋友可以参考下
    2025-11-11

最新评论