欢迎光临本地信息咨询网
详情描述

NumPy 的 zeros() 函数用于创建指定形状和数据类型、元素全为 0 的数组。以下是详细的使用总结:

1. 基本语法

numpy.zeros(shape, dtype=float, order='C', *, like=None)

2. 主要参数

shape

  • 数组的形状,可以是整数或整数元组
  • 示例
    np.zeros(5)            # 一维数组,5个元素
    np.zeros((2, 3))       # 2行3列的二维数组
    np.zeros((2, 3, 4))    # 三维数组

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风格的算法)

这个函数在机器学习和科学计算中非常常用,特别是在需要初始化参数或创建基准数组时。

相关帖子
通用贷款合同范本解读,纠正大众对合同条款的常见理解误区
通用贷款合同范本解读,纠正大众对合同条款的常见理解误区
种植过程中如果遇到自然灾害导致减产,是否会影响最终补贴的获取?
种植过程中如果遇到自然灾害导致减产,是否会影响最终补贴的获取?
职工医保门诊共济与原有的门诊慢性病、特殊病待遇有何区别与联系?
职工医保门诊共济与原有的门诊慢性病、特殊病待遇有何区别与联系?
针对长途骑行者,绿道驿站是否可能提供临时休息或短时租赁服务?
针对长途骑行者,绿道驿站是否可能提供临时休息或短时租赁服务?
爸爸在申请和休陪产假期间,工资和奖金是如何进行计算和发放的?
爸爸在申请和休陪产假期间,工资和奖金是如何进行计算和发放的?
自由职业者或灵活就业人员,是否可以为自己设立交通通讯补贴以降低税负?
自由职业者或灵活就业人员,是否可以为自己设立交通通讯补贴以降低税负?
2026年,社会舆论和年轻人对彩礼“限高”政策的普遍看法是什么?
2026年,社会舆论和年轻人对彩礼“限高”政策的普遍看法是什么?
计算经济补偿金时,工资基数是指应发工资还是实发工资?
计算经济补偿金时,工资基数是指应发工资还是实发工资?
到2026年,社保“第六险”的评估标准是否更加统一和规范了?
到2026年,社保“第六险”的评估标准是否更加统一和规范了?
贷款期间房产信息变更,讲解信息修改及二次抵押备案调整流程
贷款期间房产信息变更,讲解信息修改及二次抵押备案调整流程
从千兆宽带降级到百兆,运营商要求缴纳高额设备调测费是否合理?
从千兆宽带降级到百兆,运营商要求缴纳高额设备调测费是否合理?
2026年新的食品标识规定,是否让预制菜配料表更透明易懂?
2026年新的食品标识规定,是否让预制菜配料表更透明易懂?
智能汽车记录的行车轨迹信息是否属于个人隐私信息范畴
智能汽车记录的行车轨迹信息是否属于个人隐私信息范畴
如何区分是为了实际需求购物,还是为了短暂的情绪抚慰而进行消费?
如何区分是为了实际需求购物,还是为了短暂的情绪抚慰而进行消费?
2026年,企业的加班审批制度如果过于严格,是否会催生更多隐形加班?
2026年,企业的加班审批制度如果过于严格,是否会催生更多隐形加班?
企业内部非正式的社交活动,如何可能加深某些群体的“隐性”排斥感?
企业内部非正式的社交活动,如何可能加深某些群体的“隐性”排斥感?
对于有过敏性鼻炎的人,在特定季节应如何护理以减少鼻子出血风险?
对于有过敏性鼻炎的人,在特定季节应如何护理以减少鼻子出血风险?
小满节气“苦菜秀”的说法从何而来,这种植物背后有哪些有趣的故事与文化?
小满节气“苦菜秀”的说法从何而来,这种植物背后有哪些有趣的故事与文化?
对维修基金的使用情况有疑问,业主可以通过哪些合法途径进行监督?
对维修基金的使用情况有疑问,业主可以通过哪些合法途径进行监督?
2026年国际原油市场价格波动,主要受全球哪些非政治性供需因素影响?
2026年国际原油市场价格波动,主要受全球哪些非政治性供需因素影响?