API · NumPy
Python NumPy numpy.shape() 函数
使用 numpy.shape() 将数组的维度作为元组获取,或者从它的 .shape 属性中读取。
本页内容
使用 NumPy 的 numpy.shape() 函数可以查看数组的维度。它会返回一个由整数构成的元组,每个值表示数组在一个维度上的长度。例如,(5, 3) 表示有 5 行和 3 列。这个元组描述输入当前的形状;元组不可变并不决定数组本身能否改变形状。
numpy.shape() 的语法
调用 numpy.shape(a),并将要检查维度的值传给它。参数 a 是必需的,可以是 NumPy 数组,也可以是其他类似数组的值,例如嵌套序列。函数会按顺序为每个维度返回一个整数,组成一个元组。一维输入的元组中有一个值;二维输入的值分别表示行数和列数;维度更高的输入则会为每个额外的轴增加一个长度值。
numpy.shape() 示例
下面的示例创建一个二维 NumPy 数组,并打印 numpy.shape() 返回的维度。
import numpy as np
array = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])
print(np.shape(array))
(5, 3)
元组的第一个值表示第一个轴的长度,第二个值表示第二个轴的长度,依此类推。对于二维数组,这两个轴分别对应行和列。在选择某个轴或将数据传给其他操作之前,可以用返回结果确认数据的排列方式。
单个轴上没有元素的数组,其形状为 (0,)。包含 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 的一维数组,其形状为 (20,)。有 5 行、3 列的数组形状为 (5, 3);由 3 组数据组成、每组有 2 行且每行有 3 个值的三维数组,形状为 (3, 2, 3)。这些元组按顺序描述各轴的长度,不表示数组中存储的值。单元素元组 (20,) 中的逗号是 Python 语法的一部分,用于将元组与加了括号的整数区分开来。
这个 Python 示例创建一个空数组并获取其形状。它没有调用 print(),只是将形状赋给变量,因此不会打印任何内容。
import numpy as np
empty_array = np.array([])
empty_shape = np.shape(empty_array)
函数会报告输入各维度上的长度。如果结果与预期不同,请检查输入的构造方式以及嵌套序列的顺序。例如,对于规则的二维数组,形状元组的第一个值是行数,第二个值是列数。NumPy 会报告数据实际呈现的结构,不会推断你希望使用的行标签或列标签。对于不规则的嵌套数据,具体行为可能受 NumPy 版本和转换规则影响;如果需要各轴长度保持一致,请使用规则数组。
使用 .shape 属性
NumPy 数组还可以通过 .shape 属性提供维度信息。对于数组 a,a.shape 返回的元组与 numpy.shape(a) 相同。如果要将一个值传给通用操作,可以使用该函数;如果手头已有数组并想直接读取其维度,则可以使用该属性。访问属性时不加括号,而 numpy.shape() 是函数调用。
例如,对于一个有 5 行、3 列的数组,a.shape 和 numpy.shape(a) 都会报告 (5, 3)。这两种形式都只报告维度,不会改变数组。改变数组形状后,再读取任一形式都会报告更新后的维度。调试数据准备过程时,这个区别很有用:在执行操作前检查形状,确认轴的数量和顺序符合预期,再根据返回的元组找出需要处理的维度。numpy.shape() 是函数,.shape 则是数组的属性。