NumPy zeros_like() 函数详解
在数据分析、机器学习与科学计算中经常需要创建一个与现有数组形状相同、但值全为零的新数组。
这时,NumPy 提供了一个非常方便的函数 —— numpy.zeros_like()
。
✨当想要一个“和现有数组一样大,但全是零”的数组时,记得用
zeros_like()
。
本文将深入介绍它的用法、参数、应用场景以及与 numpy.zeros()
的区别。
目录
- 📘 一、函数简介
- 🧩 二、参数详解
- ⚙️ 三、基本用法示例
- 示例 1:最简单的用法
- 示例 2:指定数据类型
- 示例 3:指定不同形状
- 示例 4:处理多维数组
- 🔍 四、与 `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.ndarray | True |
shape | 可选,用于重新指定形状 | None |
⚙️ 三、基本用法示例
示例 1:最简单的用法
import numpy as npa = 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]]
会发现:
b
与a
的形状完全一致- 元素类型(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 timea = 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()
避免了显式指定形状,代码更简洁、更可维护。
🧱 六、实际应用场景
- 矩阵运算初始化
result = np.zeros_like(matrix)
- 神经网络梯度缓存
grad_W = np.zeros_like(weights)
- 掩码操作或图像处理
mask = np.zeros_like(image, dtype=bool)
- 科学计算的占位符数组
temp = np.zeros_like(data, dtype=float)
🧭 七、总结
特性 | zeros_like() |
---|---|
功能 | 创建一个与给定数组形状和类型相同的零数组 |
优点 | 简洁、安全、自动继承 dtype 与 shape |
常见用途 | 初始化、占位、缓存矩阵、图像掩码 |