NumPy 的 zeros() 函数用于创建指定形状和数据类型、元素全为 0 的数组。以下是详细的使用总结:
numpy.zeros(shape, dtype=float, order='C', *, like=None)
np.zeros(5) # 一维数组,5个元素
np.zeros((2, 3)) # 2行3列的二维数组
np.zeros((2, 3, 4)) # 三维数组
float64np.zeros(5, dtype=int) # 整型数组
np.zeros(3, dtype=complex) # 复数数组
np.zeros(2, dtype=bool) # 布尔数组(全为False)
'C':C风格,行优先(默认)'F':Fortran风格,列优先np.zeros((2,3), order='C') # 行优先存储
np.zeros((2,3), order='F') # 列优先存储
template = np.array([[1, 2], [3, 4]])
arr = np.zeros((2,2), like=template) # 继承template的dtype和order
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.)]
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 # 测试加法运算时间
| 函数 | 用途 | 特点 |
|---|---|---|
zeros() |
创建全0数组 | 元素为0 |
ones() |
创建全1数组 | 元素为1 |
empty() |
创建未初始化数组 | 最快,内容随机 |
full() |
创建填充指定值的数组 | 可指定任意填充值 |
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)
dtype=np.float32 减少内存占用np.empty() 可能更快order='F' 可能在某些运算中提高性能(尤其是Fortran风格的算法)这个函数在机器学习和科学计算中非常常用,特别是在需要初始化参数或创建基准数组时。