1、array 的形状(shape)
数组的形状(shape) 用来描述:
👉 数组在每个维度上包含多少个元素
换句话说:
shape 决定了数组是 几维的
以及 每一维的长度
例如:
一维数组:
(n,)二维数组:
(rows, cols)三维数组:
(x, y, z)
2、获取数组的形状
NumPy 数组对象具有一个名为 shape 的属性。shape 返回的是一个 元组(tuple),其中:
元组的长度 = 数组的维数
每个元素表示对应维度的大小
示例:获取二维数组的形状
import numpy as np
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
print(arr.shape)输出:
(2, 4)
说明:
2→ 第 1 个维度(行)有 2 个元素4→ 第 2 个维度(列)有 4 个元素
即:2 行 4 列的二维数组
示例:高维数组的 shape
import numpy as np
arr = np.array([1, 2, 3, 4], ndmin=5)
print(arr)
print('shape of array:', arr.shape)输出示例:
[[[[[1 2 3 4]]]]] shape of array: (1, 1, 1, 1, 4)
3、shape 元组的含义
shape 返回的是一个元组,每个索引位置的值表示对应维度的大小。
以上例为例:
arr.shape == (1, 1, 1, 1, 4)
含义如下:
| 维度 | 元组索引 | 元素个数 |
|---|---|---|
| 第 1 维 | 0 | 1 |
| 第 2 维 | 1 | 1 |
| 第 3 维 | 2 | 1 |
| 第 4 维 | 3 | 1 |
| 第 5 维 | 4 | 4 |
也就是说:
最内层(第 5 维)包含 4 个元素,其外层维度都是“包裹结构”
4、shape 与维度(ndim)的关系(补充理解)
虽然 shape 本身就能反映维度信息,但 NumPy 还提供了 ndim 属性:
print(arr.ndim)
输出:
5
关系总结:
ndim→ 数组的维数shape→ 每个维度的大小len(shape) == ndim
5、常见 shape 示例速览(帮助理解)
| 数组 | 示例 | shape |
|---|---|---|
| 标量 | np.array(5) | () |
| 一维数组 | np.array([1,2,3]) | (3,) |
| 二维数组 | np.array([[1,2],[3,4]]) | (2, 2) |
| 三维数组 | np.ones((2,3,4)) | (2, 3, 4) |
⚠️ 注意:
一维数组的 shape 是 (n,),不是 (1, n)。
6、为什么 shape 很重要?
在 NumPy 中,shape 决定了:
数组能否进行运算(广播规则)
索引和切片的方式
reshape 是否合法
与其他数组是否“形状兼容”
很多 NumPy 报错都与 shape 有关,例如:
ValueError: operands could not be broadcast together