| 用途 | 方法 | 语法示例 | 核心作用 | 输出示例 |
| 基础构造 | ||||
| ▪ 从 Python 数据结构创建 | np.array() | np.array([[1, 2], [3, 4]]) | 将列表/元组转换为 ndarray | array([[1, 2], [3, 4]]) |
| ▪ 复制数组 | np.copy() | np.copy(arr) | 创建独立副本(深拷贝) | 与原数组相同但不共享内存 |
| 预定义形状填充 | ||||
| ▪ 全0数组 | np.zeros() | np.zeros((2,3)) | 快速初始化全0数组 | [[0., 0., 0.], [0., 0., 0.]] |
| ▪ 全1数组 | np.ones() | np.ones((3,2), dtype=int) | 快速初始化全1数组 | [[1, 1], [1, 1], [1, 1]] |
| ▪ 未初始化数组 | np.empty() | np.empty((2,2)) | 预分配内存(值随机) | 随机值(如 [[1e-323, 0.], [0., 0.]]) |
| ▪ 填充固定值 | np.full() | np.full((2,3), 5) | 用指定值填充数组 | [[5, 5, 5], [5, 5, 5]] |
| 基于数值范围生成 | ||||
| ▪ 等差序列 | np.arange() | np.arange(0, 10, 2) | 生成步长固定的序列(不含终点) | [0, 2, 4, 6, 8] |
| ▪ 等间隔序列 | np.linspace() | np.linspace(0, 1, 5) | 生成指定数量的等间隔值(含终点) | [0.0, 0.25, 0.5, 0.75, 1.0] |
| ▪ 对数间隔序列 | np.logspace() | np.logspace(0, 2, 3, base=10) | 生成对数间隔值(如 10^0, 10^1, 10^2) | [1.0, 10.0, 100.0] |
| 特殊矩阵生成 | ||||
| ▪ 单位矩阵 | np.eye() | np.eye(3) | 生成单位矩阵(对角线为1) | [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]] |
| ▪ 对角矩阵 | np.diag() | np.diag([1, 2, 3]) | 生成以指定值为对角线的矩阵 | [[1, 0, 0], [0, 2, 0], [0, 0, 3]] |
| 随机数组生成 | ||||
| ▪ 均匀分布随机数 | np.random.rand() | np.random.rand(2,2) | 生成 [0,1) 均匀分布的随机数 | [[0.43, 0.89], [0.21, 0.57]] |
| ▪ 正态分布随机数 | np.random.randn() | np.random.randn(2,2) | 生成标准正态分布随机数(均值为0,方差为1) | [[-0.5, 1.2], [0.3, -1.8]] |
| ▪ 随机整数 | np.random.randint() | np.random.randint(1,10, (2,2)) | 生成指定范围内的随机整数 | [[3, 7], [5, 2]] |
| 高级构造方法 | ||||
| ▪ 从字符串创建 | np.array() | np.array([‘a’, ‘bc’]) | 将字符串转换为字符数组 | array([‘a’, ‘bc’], dtype='<U2′) |
| ▪ 从文件读取 | np.loadtxt() | np.loadtxt(‘data.txt’) | 从文本文件加载数据 | 依赖文件内容(如 [[1., 2.], [3., 4.]]) |
| ▪ 函数生成数组 | np.fromfunction() | np.fromfunction(lambda i,j: i+j, (3,3)) | 根据函数生成数组元素 | [[0., 1., 2.], [1., 2., 3.], [2., 3., 4.]] |
创建方法汇总
- 基础构造: 适用于手动构建小规模数组或复制已有数据。
- 预定义形状填充: 用于快速初始化固定形状的数组(如全0占位、全1初始化)。
- 基于数值范围生成: 生成数值序列,常用于模拟时间序列、坐标网格等。
- 特殊矩阵生成: 数学运算专用(如线性代数中的单位矩阵)。
- 随机数组生成: 模拟实验数据、初始化神经网络权重等场景。
- 高级构造方法: 处理非结构化数据(如文件、字符串)或通过函数生成复杂数组。
2.2.3.1 从 Python 数据结构转换
将 Python 列表、元组等转换为 ndarray,是最直接的方式。
np.array(object, dtype=None)
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3])
print(arr1) # 输出: [1 2 3]
# 从嵌套列表创建二维数组
arr2 = np.array([[1, 2], [3, 4]])
print(arr2)
# 输出:
# [[1 2]
# [3 4]]
# 指定数据类型
arr3 = np.array([1, 2.5], dtype=np.float32)
print(arr3.dtype) # 输出: float32
注意事项
- 混合类型时,NumPy 会统一为最高优先级类型(如 int + float → float,数值 + 字符串 → 字符串)。
- 列表的嵌套层级决定 ndim(维度数)。
2.2.3.2 预定义形状填充
np.zeros(shape, dtype=float) # 全0 返回给定形状和类型的新数组,用0填充。
np.ones(shape, dtype=float) # 全1 返回给定形状和类型的新数组,用1填充。
# 创建 2x3 全0浮点数组
zeros_arr = np.zeros((2, 3))
print(zeros_arr)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]]
# 创建 3x2 全1整数数组
ones_arr = np.ones((3, 2), dtype=int)
print(ones_arr)
# 输出:
# [[1 1]
# [1 1]
# [1 1]]
默认数据类型为 float64,需显式指定 dtype 为 int 或其他类型。
未初始化的数组 (np.empty)
np.empty(shape, dtype=float)
返回给定形状和类型的未初始化的新数组。
创建未初始化的数组(值随机,取决于内存状态),适用于对性能要求极高的场景。
empty_arr = np.empty((2, 2))
print(empty_arr) # 输出可能为随机值(如 [[1e-323, 0. ], [0., 0. ]])
不推荐直接使用:需手动填充数据,否则可能引入不可预测的错误。
需要注意的是,np.empty 并不保证数组元素被初始化为 0,它只是分配内存空间,数组中的元素值是未初始化的,可能是内存中的任意值。
重复填充数组 (np.full)
np.full(shape, fill_value, dtype)
full_arr = np.full((2, 3), 5)
print(full_arr)
# 输出:
# [[5 5 5]
# [5 5 5]]
zeros_like():返回与给定数组具有相同形状和类型的0新数组。
ones_like():返回与给定数组具有相同形状和类型的1新数组。
empty_like():返回与给定数组具有相同形状和类型的未初始化的新数组。
arr2 = np.ones_like(arr1) # 创建和arr1形状相同的全1数组
arr4 = np.empty_like(arr3) # 创建和arr3形状相同的未初始化数组
arr2 = np.full_like(arr1, 5)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END












请登录后查看评论内容