三、ndarray的创建

suaxi
2025-11-13 / 0 评论 / 5 阅读 / 正在检测是否收录...

1. 基础构造

适用于小规模数组或复制已有数据

# 基础创建
arr = np.array([1, 2, 3])
print(arr)

[1 2 3]
# copy(深拷贝)
arr_copy = arr.copy()
print(arr_copy)

arr_copy[0] = 0
print(arr_copy)
print(arr)

[1 2 3]
[0 2 3]
[1 2 3]


2. 预定义形状填充

用于快速初始化固定形状的数组(如全0占位,全1初始化)

# 预定义形状
# 全 0
arr = np.zeros((2, 3))
# 元素类型默认为 float64
print(arr)

# 创建时指定元素类型
arr = np.zeros((2, 3), dtype=int)
print(arr)

[[0. 0. 0.]
 [0. 0. 0.]]

[[0 0 0]
 [0 0 0]]
# 全 1
arr = np.ones((2, 3))
# 元素类型默认为 float64
print(arr)

[[1. 1. 1.]
 [1. 1. 1.]]
# 未初始化(每次初始化的结果不一致)
arr = np.empty((2, 3))
print(arr)

[[1. 1. 1.]
 [1. 1. 1.]]
# 指定初始化值全填充
arr =np.full((2, 3), 1)
print(arr)

[[1 1 1]
 [1 1 1]]
# _like 表示 shape、dtype和指定的数组一样
arr_like = np.zeros_like(arr)
print(arr_like)

[[0 0 0]
 [0 0 0]]


3. 基于数值范围生成

生成数值序列,常用于模拟时间序列、坐标网格等

# 等差数列
# 参数:起始位置,结束位置,步长
arr = np.arange(0, 5, 1)
print(arr)

[0 1 2 3 4]
# 等间隔数列
# 参数:起始位置,结束位置,要取几份(均分几份)
arr = np.linspace(1, 5, 3)
print(arr)

# 知道长度和要取几份,通过arange也能实现
arr = np.arange(1, 100, 25)
print(arr)
arr = np.arange(1, 101, 25)
print(arr)

[1. 3. 5.]
[ 1 26 51 76]
[ 1 26 51 76]
# 对数间隔数列
# 参数:起始位置,结束位置,要取几份(均分几份),指数
arr = np.logspace(0, 4, 3, base=2)
print(arr)

[ 1.  4. 16.]


4. 矩阵

名称维度示例备注
标量0维1, 2单个数字,无行列
向量1维[1, 2, 3]只有行或列
矩阵2维[[1, 2, 3], [4, 5, 6]]严格的行列结构
张量>= 3维[[[1, 2], [3, 4]]]高阶数组(如RGB图像)

矩阵是由 行(row)列(column) 排列成的矩形数组

2.矩阵.png

形状(shape):2行3列,记作 2x3 矩阵
元素(entry):矩阵中的每个数字称作元素

特殊矩阵

1.特殊矩阵.png

# 单位矩阵
arr = np.eye(3, 5, dtype=int)
print(arr)

[[1 0 0 0 0]
 [0 1 0 0 0]
 [0 0 1 0 0]]
# 对角矩阵
arr = np.diag([-1, 1, 2, 3])
print(arr)

[[-1  0  0  0]
 [ 0  1  0  0]
 [ 0  0  2  0]
 [ 0  0  0  3]]


5. 随机数组生成

模拟实验数据、初始化神经网络权重等

# 随机数组
# 0 - 1 之间的
arr = np.random.rand(3, 3)
print(arr)

[[0.49269745 0.28805571 0.0111438 ]
 [0.43128953 0.72709    0.5444694 ]
 [0.93261996 0.32217166 0.72474585]]
# 指定范围区间
# 随机浮点数
arr = np.random.uniform(1, 3, (3, 3))
print(arr)

[[2.70492755 1.636252   1.18072158]
 [1.38557557 2.13813528 2.11942667]
 [2.18956104 2.72948314 1.8949814 ]]
# 随机整数
arr = np.random.randint(1, 10, (3, 3))
print(arr)

[[4 9 9]
 [8 5 4]
 [2 6 5]]
# 随机数列(正态分布 -3 ~ 3之间)
# 两边的概率小,中间的概率大
arr = np.random.randn(3, 3)
print(arr)

[[ 0.89822946  1.21094463 -1.23360184]
 [ 0.26999662  0.97035489 -1.95975342]
 [-0.54847444  0.24917721  0.13710756]]
# 设置随机种子
# 作用:a、b两个同事在各自电脑上做测试时,需要一个相同的数组,通过种子来做关联
np.random.seed(20)
arr = np.random.randint(1, 10, (3, 3))
print(arr)

[[4 5 7]
 [8 3 1]
 [7 9 6]]


6. 高级构造方法

处理非结构化数据(文件、字符串等)或通过函数生成复杂数组

0

评论 (0)

取消