理解numpy.array的形状

4

如果数组x的声明如下:

x = np.array([[1, 2], [3, 4]])
x = [1, 2]

The shape of x is (2,), which indicates a one-dimensional array with 2 elements.

x = np.array([1, 2, 3])

为什么x的形状是(3,)而不是(1,3)?我误认为形状应该是(行,列)的形式了吗?

1
[1,2,3] 是一维的,[[1,2],[3,4]] 是二维的。比较 [[[1,2],[3,4]],[[5, 6], [7, 8]]]。"(行, 列)" 描述的是矩阵,而不是 n 维数组。 - MisterMiyagi
2
你唯一的“错误”就是将思维局限于矩阵(2x2数组)。在这种情况下,确实可以将其视为2行2列,但如果您有63个维度呢?行和列没有太多意义。更简单地说,一个一维向量没有行,只有元素。它与1x3数组不同。 - Tomerikoo
作为一般的理解规则,您可以认为括号层数表示shape中数字的数量,而数字本身则表示每个对应括号集合中有多少元素。 - Tomerikoo
因为它只有一个维度。 - juanpa.arrivillaga
3个回答

5

因为np.array([1,2,3])是一维数组。(3,)表示这是具有三个元素的单个维度。

(1,3)表示这是一个二维数组。 如果你在数组上使用reshape()方法,并给它参数(1,3),它将添加额外的方括号。

>>> np.array([1,2,3]).reshape(1,3)
array([[1, 2, 3]])

1
啊哈,向量返回(3,)的原因是它只有一个维度!非常感谢 :) - Kyungmin Kim

1

np.array代表一个n维数组。这可能包括一个二维数组来表示矩阵,其中(行,列)是适当的。它也可以包括一维、三维或其他数组,对于这些数组,(行,列)的维度过多/过少。比较:

>>> # 1-dimensional
>>> np.array([1, 2, 3]).shape
(3,)
>>> np.array([1, 2, 3])[1]
2
>>> # 2-dimensional
>>> np.array([[1, 2, 3]]).shape
(1, 3)
>>> np.array([[1, 2, 3]])[0,1]
2
>>> np.array([[1], [2], [3]]).shape
(3, 1)
>>> np.array([[1], [2], [3]])[1, 0]
2
>>> # 3-dimensional
>>> np.array([[[1, 2, 3]]]).shape
(1, 1, 3)
>>> np.array([[[1, 2, 3]]])[0,0,1]
2
>>> np.array([[[1,2],[3,4]],[[5, 6], [7, 8]]]).shape
(2, 2, 2)

注意不同的形状 (3,), (1, 3), (3, 1), (1, 1, 3) ... 表示不同的逻辑布局,例如特定元素所在位置的不同。

明白 np.array([[1,2], [3,4]]) 返回 (2,2) 只是一个行列数的巧合吗?实际上它意味着有两个元组的二维数组? - Kyungmin Kim

1
根据文档np.array是多维容器。请考虑:
np.array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]).shape
# (2, 2, 2)

此外,np.shape 总是返回一个元组。在您的示例中,(3,) 是一个包含一个元素的元组的表示形式,这是一维数组形状的正确值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接