NumPy 的 zeros() 函数用于创建指定形状和数据类型、元素全为 0 的数组。以下是详细的使用总结:
1. 基本语法
numpy.zeros(shape, dtype=float, order='C', *, like=None)
2. 主要参数
shape
dtype
- 数据类型,默认为
float64
- 常用类型:
np.zeros(5, dtype=int) # 整型数组
np.zeros(3, dtype=complex) # 复数数组
np.zeros(2, dtype=bool) # 布尔数组(全为False)
order
- 内存存储顺序:
'C':C风格,行优先(默认)
'F':Fortran风格,列优先np.zeros((2,3), order='C') # 行优先存储
np.zeros((2,3), order='F') # 列优先存储
like
- 参考另一个数组对象创建具有相同属性的数组(NumPy 1.20+)
template = np.array([[1, 2], [3, 4]])
arr = np.zeros((2,2), like=template) # 继承template的dtype和order
3. 实用示例
创建不同形状的零数组
import numpy as np
# 一维
arr1 = np.zeros(5) # [0., 0., 0., 0., 0.]
# 二维(矩阵)
arr2 = np.zeros((3, 4))
# [[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]]
# 三维
arr3 = np.zeros((2, 2, 3))
指定数据类型
# 整数零数组
int_zeros = np.zeros(3, dtype=np.int32) # [0, 0, 0]
# 复数零数组
complex_zeros = np.zeros(2, dtype=complex) # [0.+0.j, 0.+0.j]
# 布尔零数组(全False)
bool_zeros = np.zeros(3, dtype=bool) # [False, False, False]
创建结构化数组
# 创建带有字段名的结构化零数组
dt = np.dtype([('x', 'f4'), ('y', 'f4'), ('z', 'f4')])
struct_zeros = np.zeros(3, dtype=dt)
# [(0., 0., 0.), (0., 0., 0.), (0., 0., 0.)]
4. 实际应用场景
初始化权重矩阵
weights = np.zeros((10, 5)) # 神经网络权重初始化
创建掩码/模板
mask = np.zeros((100, 100), dtype=bool) # 全False的掩码
mask[10:20, 30:40] = True # 设置特定区域为True
占位数组
# 预先分配内存空间,稍后填充数据
result = np.zeros((1000, 1000))
# ... 后续计算填充数据
基准测试
# 测试数组操作性能
arr = np.zeros((1000, 1000))
%timeit arr + 1 # 测试加法运算时间
5. 与其他创建函数对比
| 函数 |
用途 |
特点 |
|---|
zeros() |
创建全0数组 |
元素为0 |
ones() |
创建全1数组 |
元素为1 |
empty() |
创建未初始化数组 |
最快,内容随机 |
full() |
创建填充指定值的数组 |
可指定任意填充值 |
6. 注意事项
内存效率:
zeros() 比
empty() + 赋值慢,但能确保数据确定性
默认类型:默认
float64,可能占用较大内存,可根据需要调整
多维形状:传递元组
(a, b, c) 而不是多个参数
与 zeros_like() 区别:
arr = np.array([[1, 2], [3, 4]])
# zeros 需要指定形状
z1 = np.zeros(arr.shape, dtype=arr.dtype)
# zeros_like 自动复制形状和类型
z2 = np.zeros_like(arr)
7. 性能提示
- 对于大型数组,考虑使用
dtype=np.float32 减少内存占用
- 如果不需要立即使用0值,
np.empty() 可能更快
- 使用
order='F' 可能在某些运算中提高性能(尤其是Fortran风格的算法)
这个函数在机器学习和科学计算中非常常用,特别是在需要初始化参数或创建基准数组时。