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参数

参数 类型 默认值 说明
object array_like 必填 列表、元组等可迭代对象
dtype dtype None 数组元素的数据类型
ndmin int 0 最小维度数
copy bool True 是否复制输入对象

常用创建函数

函数 说明 示例
np.zeros() 创建全零数组 np.zeros((2,3))
np.ones() 创建全一数组 np.ones((2,3))
np.empty() 创建未初始化数组 np.empty((2,3))
np.full() 创建指定值数组 np.full((2,3), 7)
np.eye() 创建单位矩阵 np.eye(3)
np.arange() 等差数组(指定步长) np.arange(0,10,2)
np.linspace() 等差数组(指定数量) np.linspace(0,1,5)
np.logspace() 等比数组 np.logspace(0,2,5)

四、代码示例

示例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() 从已有数据转换
np.zeros/ones/full() 初始化特定值数组
np.arange/linspace() 生成数值范围
np.random 生成随机数据
np.empty() 性能优先的预分配 最高

八、小结

  • 基础创建: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,创建一个形状和类型相同的全零数组。这在需要创建与原数组相同形状的零数组时非常方便,代码更简洁。

标签: ndarray 数组创建 NumPy np.zeros np.arange linspace

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: NumPy库简介与安装教程 - Python科学计算入门指南 下一篇: NumPy数组属性详解 - shape/dtype/ndim全面指南

poll相关推荐