HOWTO · NumPy
创建空的 NumPy 数组
了解如何使用 numpy.zeros() 和 numpy.empty() 在 Python 中创建空的 NumPy 数组。本指南为每种方法提供清晰的示例和详细说明,帮助你为数据操作任务高效地初始化数组。无论你是初学者还是经验丰富的程序员,都能从中获得提升编程技能的宝贵见解。
本页内容
每个元素都应从 0 开始时,使用 numpy.zeros();如果会在读取前为每个元素赋值,则可使用 numpy.empty()。虽然名称中有 empty,numpy.empty() 仍会创建指定数量的元素,只是不预先设置它们的初始值。shape 参数描述数组的维度:传入 5 这样的整数会创建一维数组,传入 (3, 4) 这样的元组则会创建三行四列的数组。
使用 numpy.zeros() 创建全零数组
numpy.zeros() 会分配数组,并将所有元素初始化为 0。传入整数可创建一维数组,传入元组则可创建多维数组。默认情况下,NumPy 使用浮点数数据类型,因此显示的值可能带有小数点。若需要整数元素,请传入 dtype=int。当已知的初始值有用时,可以选择此函数;例如,后续计算只更新部分位置,而其他位置应保持为 0。
此示例会创建一个一维数组和一个二维整数数组,然后更新其中一个位置。它会打印数组的值,以及数组 shape 属性返回的元组。
运行此示例:
import numpy as np
values = np.zeros(5)
matrix = np.zeros((3, 4), dtype=int)
values[2] = 7
print(values)
print(matrix.shape)
[0. 0. 7. 0. 0.]
(3, 4)
由于 numpy.zeros() 会初始化每个位置,因此也适合逐步填充数组的场景。初始数据类型很重要:整数数组存储整数值,浮点数组则可以表示小数。shape 参数始终用于指定维度,并不天然表示“行和列”。例如,单项形状 5 表示一维,而 (3, 4) 表示二维。
使用 numpy.empty() 创建未初始化数组
对于普通数值数据类型,numpy.empty() 会按指定的形状创建数组,但不会初始化其中的元素,因此这些元素的初始值不确定。对象数据类型则不同:例如,np.empty(2, dtype=object) 会将两个元素初始化为 None。读取任何元素之前,都要先为其赋予有效值;不要依赖数值数组的初始内容。
当程序能够立即填满每个元素,而且根据具体工作负载跳过初始化步骤有用时,可以使用此函数。能否因此明显节省时间,取决于数组大小、后续赋值操作、硬件以及周边工作;它并非在所有情况下都更快。若需要可靠的初始值,或只会更新部分位置,请改用 numpy.zeros()。
下面的示例会在读取数组前为每个位置赋值。你可以更改维度或数据类型,但仍须遵守同一规则:使用数组前先写入所有元素。
import numpy as np
values = np.empty((2, 3), dtype=int)
values[:] = [[1, 2, 3], [4, 5, 6]]
print(values)
[[1 2 3]
[4 5 6]]
对于一维数组,也可以使用 values = np.empty(5, dtype=int),然后在读取前为全部五个位置赋值。多维数组也适用相同的方法,只需传入元组形状。numpy.empty() 这个名称表示元素未经初始化,并非数组没有元素;数组的形状和元素数量仍由你提供的参数决定。