NumPy(Numerical Python 的缩写)是一个开源的 Python 科学计算库。使用 NumPy,可以高效地处理 数组和矩阵数据,并提供大量用于 线性代数、傅里叶变换和随机数生成 等功能。在 NumPy 中,数组形状(shape) 是一个非常核心的概念,它描述了数组在每个维度上的结构方式。本文主要介绍 NumPy 数组形状(array shape)的含义、获取方式及其理解方法。

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 维01
第 2 维11
第 3 维21
第 4 维31
第 5 维44

也就是说:

最内层(第 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

推荐文档