NumPy zeros() 函数详解
NumPy(Numerical Python)是Python科学计算领域的核心库。它提供了强大的多维数组对象,以及用于处理这些数组的工具。在数据科学、机器学习和工程计算中经常需要创建特定形状和数据类型的数组。本文将重点介绍 NumPy 中一个基础且极其重要的函数:numpy.zeros()
。
文章目录
- 一、函数简介
- 二、参数详解
- 参数解析
- 三、相关示例
- 示例 1:创建一维数组
- 示例 2:创建二维数组
- 示例 3:创建三维数组
- 示例 4:使用不同的数据类型
- 四、`zeros()` 与 `empty()` 的区别
一、函数简介
numpy.zeros()
函数用于创建一个指定形状(shape)和数据类型(dtype)的新的 NumPy 数组,并用零填充该数组的每一个元素。
在需要初始化矩阵或张量、作为累加器的起始值,或在分配内存以供后续计算时,这个函数都非常实用。
📖它和zeros_like()
函数的比较见NumPy zeros_like() 函数详解
官方函数解析numpy.zeros
二、参数详解
numpy.zeros()
的基本函数签名如下:
numpy.zeros(shape, dtype=float, order='C', *, like=None)
参数解析
shape
(必须):- 定义新数组的维度。
- 可以是一个整数(表示一维数组的大小),也可以是一个整数元组(例如
(rows, columns)
表示二维数组,或(d1, d2, d3)
表示三维数组)。
dtype
(可选,默认为float64
):- 定义数组中元素的数据类型,例如
int
(整数)、float
(浮点数)、complex
(复数)等。 - 通常使用
np.int32
、np.float64
或简单地使用 Python 的int
、float
。
- 定义数组中元素的数据类型,例如
order
(可选,默认为'C'
):- 指定数组在内存中的存储顺序。
'C'
表示行主序(C 语言风格),即最后一个轴变化最快。'F'
表示列主序(Fortran 风格),即第一个轴变化最快。
like
(可选):- (NumPy 1.20.0 版本新增)允许创建一个与给定对象具有相同属性(如
shape
和dtype
)的数组,但使用零填充。
- (NumPy 1.20.0 版本新增)允许创建一个与给定对象具有相同属性(如
三、相关示例
示例 1:创建一维数组
创建一个包含 5 个元素的零数组,默认数据类型为浮点数:
import numpy as np# 创建一个包含 5 个浮点数 0 的一维数组
arr1 = np.zeros(5)
print(arr1)
print(f"数据类型:{arr1.dtype}")
# 输出: [0. 0. 0. 0. 0.]
# 数据类型:float64
示例 2:创建二维数组
创建一个 3 行 4 列的二维数组,并指定数据类型为整数:
# 创建一个 3x4 的整数零矩阵
arr2 = np.zeros((3, 4), dtype=int)
print(arr2)
print(f"数据类型:{arr2.dtype}")
# 输出:
# [[0 0 0 0]
# [0 0 0 0]
# [0 0 0 0]]
# 数据类型:int64 (或根据平台可能是 int32)
示例 3:创建三维数组
创建一个 2x3x2 的三维数组(例如,2 个 3x2 的切片):
# 创建一个 2x3x2 的三维数组
arr3 = np.zeros((2, 3, 2))
print(arr3)
print(f"维度:{arr3.shape}")
# 输出:
# [[[0. 0.]
# [0. 0.]
# [0. 0.]]
#
# [[0. 0.]
# [0. 0.]
# [0. 0.]]]
# 维度:(2, 3, 2)
示例 4:使用不同的数据类型
创建包含 32 位浮点数(更节省内存)的数组:
# 指定 dtype 为 float32
arr4 = np.zeros((2, 2), dtype=np.float32)print(arr4)
print(f"数据类型:{arr4.dtype}")
# 数据类型:float32
四、zeros()
与 empty()
的区别
在 NumPy 中,另一个用于创建新数组的函数是 numpy.empty()
。了解两者之间的关键区别至关重要:
特性 | numpy.zeros(shape) | numpy.empty(shape) |
---|---|---|
元素值 | 保证所有元素都被初始化为 零。 | 元素值是未初始化的(可能包含内存中已有的随机值)。 |
速度 | 略慢,因为它必须写入所有的零。 | 极快,因为它跳过了初始化元素的步骤。 |
用途 | 需要一个干净、零值数组作为起点时。 | 当确定会立即用有意义的值覆盖数组的全部内容时,用于性能优化。 |
除非是在处理对性能极其敏感的场景,并且非常确定会完全覆盖数组,否则通常建议使用
np.zeros()
,因为它更安全、更可预测。