对于np.array([1,2,3])为什么形状(3,)代替(3,1)?

时间:2016-09-25 14:28:14

标签: python arrays numpy

我注意到,对于排名为1的数组,其中3个元素为numpy返回(3,)形状。我知道这个元组代表了每个维度上数组的大小,但为什么不是它(3,1)?

import numpy as np

a = np.array([1, 2, 3])  # Create a rank 1 array
print a.shape            # Prints "(3,)"

b = np.array([[1,2,3],[4,5,6]])   # Create a rank 2 array
print b.shape                     # Prints "(2, 3)"

2 个答案:

答案 0 :(得分:7)

简而言之,这是因为它是一个 - 维数组(因此一个 - 元素形状元组)。也许以下内容有助于澄清问题:

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

我们甚至可以去三维(和更高):

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

答案 1 :(得分:-2)

你可以同样问,"为什么形状不是(3,1,1,1,1,1,1)?毕竟,它们是等价的。

NumPy经常选择折叠单个维度,或者将它们视为可选,例如在broadcasting期间。这很有用,因为3向量具有完全相同数量的元素,并且在相同的相对方向上,与3x1x1x1x1x1矩阵相同。