pin_drop当前位置:知识文库 ❯ 图文
NumPy ndarray创建方法大全 - 数组初始化完整指南
一、概述
ndarray(N-dimensional array)是NumPy的核心数据结构,表示多维同构数组。NumPy提供了多种创建ndarray的方式,包括从Python列表/元组转换、使用内置函数创建特殊数组(零数组、单位矩阵等)、以及从数值范围创建数组。掌握不同的创建方式是使用NumPy的基础。
二、创建语法总览
从列表创建
代码示例
np.array(object, dtype=None, ndmin=0)内置函数创建
代码示例
np.zeros(shape, dtype=float)
np.ones(shape, dtype=float)
np.empty(shape, dtype=float)
np.full(shape, fill_value)
np.eye(N)
np.identity(N)数值范围创建
代码示例
np.arange(start, stop, step)
np.linspace(start, stop, num)
np.logspace(start, stop, num)三、参数说明
np.array参数
常用创建函数
四、代码示例
示例1:从Python列表/元组创建数组
代码示例
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(f"一维数组: {arr1}, 类型: {arr1.dtype}")
# 从嵌套列表创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(f"二维数组:\n{arr2}")
# 指定数据类型
arr3 = np.array([1, 2, 3], dtype=np.float64)
print(f"浮点数组: {arr3}, 类型: {arr3.dtype}")
# 指定最小维度
arr4 = np.array([1, 2, 3], ndmin=3)
print(f"三维数组: {arr4}, 形状: {arr4.shape}")输出:
代码示例
一维数组: [1 2 3 4 5], 类型: int32
二维数组:
[[1 2 3]
[4 5 6]]
浮点数组: [1. 2. 3.], 类型: float64
三维数组: [[[1 2 3]]], 形状: (1, 1, 3)示例2:使用内置函数创建特殊数组
代码示例
import numpy as np
# 全零数组
zeros = np.zeros((2, 3))
print(f"全零数组:\n{zeros}")
# 全一数组
ones = np.ones((2, 3), dtype=np.int32)
print(f"全一数组:\n{ones}")
# 单位矩阵
eye = np.eye(3)
print(f"单位矩阵:\n{eye}")
# 指定填充值
full = np.full((2, 3), 7.5)
print(f"填充数组:\n{full}")
# 对角线数组
diag = np.diag([1, 2, 3])
print(f"对角数组:\n{diag}")输出:
代码示例
全零数组:
[[0. 0. 0.]
[0. 0. 0.]]
全一数组:
[[1 1 1]
[1 1 1]]
单位矩阵:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
填充数组:
[[7.5 7.5 7.5]
[7.5 7.5 7.5]]
对角数组:
[[1 0 0]
[0 2 0]
[0 0 3]]示例3:从数值范围创建数组
代码示例
import numpy as np
# arange:等差数组(指定步长)
arr1 = np.arange(0, 10, 2)
print(f"arange(0,10,2): {arr1}")
# linspace:等差数组(指定数量)
arr2 = np.linspace(0, 1, 5)
print(f"linspace(0,1,5): {arr2}")
# logspace:等比数组
arr3 = np.logspace(0, 2, 5)
print(f"logspace(0,2,5): {arr3}")
# 随机数组
rng = np.random.default_rng(42)
arr4 = rng.random((2, 3))
print(f"随机数组:\n{arr4}")
# 从已有数组创建
original = np.array([1, 2, 3])
copy_arr = np.array(original)
like_arr = np.zeros_like(original)
print(f"副本: {copy_arr}")
print(f"同形零数组: {like_arr}")输出:
代码示例
arange(0,10,2): [0 2 4 6 8]
linspace(0,1,5): [0. 0.25 0.5 0.75 1. ]
logspace(0,2,5): [ 1. 3.16227766 10. 31.6227766 100. ]
随机数组:
[[0.77395605 0.43887844 0.85859792]
[0.69736803 0.09417735 0.97562235]]
副本: [1 2 3]
同形零数组: [0 0 0]五、实际应用场景
-
机器学习权重初始化:使用np.random.randn生成正态分布随机数,初始化神经网络权重矩阵
-
图像画布创建:使用np.zeros生成指定尺寸的黑色图像作为空白画布
-
实验数据生成:使用np.linspace创建等间距的采样点,用于函数绘图或信号处理
六、注意事项
注意:np.empty()创建的数组内容不确定(非零),需要后续赋值才能使用。
注意:np.arange()的步长为浮点数时可能因浮点精度导致元素数量不符预期,建议使用np.linspace()。
注意:np.array()默认会复制输入数据,设置copy=False可避免复制但需谨慎。
七、数组创建方式对比
八、小结
-
基础创建:np.array()从Python列表/元组创建数组,可指定dtype和ndmin
-
特殊值数组:np.zeros/ones/full/eye用于创建特殊值数组
-
范围数组:np.arange按步长创建,np.linspace按数量创建等差数组
-
形状继承:np.zeros_like/ones_like等函数基于已有数组的形状创建新数组
小贴士
在需要高性能创建大数组时,优先考虑np.empty()进行预分配,然后再填充数据。这比使用np.zeros()略快,因为它跳过了内存清零步骤。但要注意,np.empty()返回的数组包含随机垃圾值,必须确保在读取前完成所有写入操作。了解更多创建方法可以参考NumPy官方文档。
九、练习题
练习1
使用np.array()创建一个3x4的二维浮点数组,并打印其形状和数据类型。
练习2
使用np.zeros()创建一个5x5的单位矩阵(对角线为1,其余为0),不使用np.eye()。
练习3
使用np.linspace()生成0到2π之间的100个等间距点,计算每个点的正弦值。
常见问题
np.arange和np.linspace有什么区别?
np.arange通过指定起始值、结束值和步长来创建数组,步长为整数时表现稳定。np.linspace通过指定起始值、结束值和元素数量来创建数组,能精确控制元素个数,特别适合浮点数范围。当需要精确控制采样点数量时,推荐使用np.linspace。
np.empty和np.zeros哪个更快?
np.empty更快,因为它只是分配内存而不初始化内容(内存中是随机垃圾值)。np.zeros需要将所有元素清零,多了一步操作。但在实际使用中,这种差异通常很小,除非创建非常大的数组。如果创建数组后会立即填充数据,可以使用np.empty来节省时间。
如何创建复数数组?
可以使用dtype=np.complex128参数来创建复数数组,例如:np.array([1+2j, 3+4j], dtype=np.complex128)。也可以使用np.zeros((3,), dtype=np.complex128)创建复数零数组。
zeros_like和zeros有什么区别?
np.zeros()需要手动指定shape和dtype参数,而np.zeros_like(existing_array)会自动从已有数组中获取shape和dtype,创建一个形状和类型相同的全零数组。这在需要创建与原数组相同形状的零数组时非常方便,代码更简洁。
本文涉及AI创作
内容由AI创作,请仔细甄别