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

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年享受免征购置税的新能源汽车,后续出售时是否会有特殊规定?
温州市长途120救护车出租&长途救护车租车服务
温州市长途120救护车出租&长途救护车租车服务
2026年,我们对食品保质期的普遍认知是否存在哪些需要更新的误区?
2026年,我们对食品保质期的普遍认知是否存在哪些需要更新的误区?
如何快速判断家中是否发生了轻微的燃气泄漏,有哪些实用自查方法?
如何快速判断家中是否发生了轻微的燃气泄漏,有哪些实用自查方法?
除了常见的五险一金,还有哪些因素会直接影响你最终的实发工资?
除了常见的五险一金,还有哪些因素会直接影响你最终的实发工资?
合肥市b2b网站开发&装修网站建设,收费透明
合肥市b2b网站开发&装修网站建设,收费透明
失信被执行人名单的公示会对个人未来的信用记录产生哪些长期影响?
失信被执行人名单的公示会对个人未来的信用记录产生哪些长期影响?
除了地震和火灾,2026年我们还需要为哪些新型或高发灾害进行针对性演习?
除了地震和火灾,2026年我们还需要为哪些新型或高发灾害进行针对性演习?
门诊共济政策实施后,去医院看门诊的报销流程和以前有什么不同?
门诊共济政策实施后,去医院看门诊的报销流程和以前有什么不同?
无锡市重症病人转院租救护车跑长途@救护车转院护送病人返乡
无锡市重症病人转院租救护车跑长途@救护车转院护送病人返乡
什么是竞业限制协议,它对普通员工的职业选择有哪些具体约束?
什么是竞业限制协议,它对普通员工的职业选择有哪些具体约束?
襄阳市长途救护车出租&救护车租车护送病人转院
襄阳市长途救护车出租&救护车租车护送病人转院
卫星通信功能逐渐融入民用电话卡,它将如何改变偏远地区的通信体验?
卫星通信功能逐渐融入民用电话卡,它将如何改变偏远地区的通信体验?
衢州市专业网站建设公司&crm系统开发,优秀设计团队
衢州市专业网站建设公司&crm系统开发,优秀设计团队
益阳市网站建设推广%crm系统开发,一站式建站服务
益阳市网站建设推广%crm系统开发,一站式建站服务
面对突发灾害,公众通过哪些渠道能最快接收到官方发布的预警信息?
面对突发灾害,公众通过哪些渠道能最快接收到官方发布的预警信息?