2.2.3  ndarray的创建

用途方法语法示例核心作用输出示例
基础构造    
▪ 从 Python 数据结构创建np.array()np.array([[1, 2], [3, 4]])将列表/元组转换为 ndarrayarray([[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.]]

创建方法汇总

  1. 基础构造:  适用于手动构建小规模数组或复制已有数据。
  2. 预定义形状填充:  用于快速初始化固定形状的数组(如全0占位、全1初始化)。
  3. 基于数值范围生成:  生成数值序列,常用于模拟时间序列、坐标网格等。
  4. 特殊矩阵生成:  数学运算专用(如线性代数中的单位矩阵)。
  5. 随机数组生成:  模拟实验数据、初始化神经网络权重等场景。
  6. 高级构造方法:  处理非结构化数据(如文件、字符串)或通过函数生成复杂数组。

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
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容