2016-09-25 88 views
2

我注意到,对于具有3个元素numpy的rank 1数组返回(3,)形状。我知道这个元组代表了每个维度上数组的大小,但为什么不是(3,1)呢?对于np.array([1,2,3]),为什么形状(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)" 
+1

一组支架,一个维度。 – hpaulj

回答

6

概括地说,这是因为它是一个维阵列(因此一个 -element shape tuple)。也许下面将有助于明确的东西:

>>> 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) 
-2

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

NumPy的,往往选中崩溃奇异的尺寸,或者把它们作为可选,如broadcasting期间。这是强有力的,因为一个3矢量具有相同数量的元件,并且在相同的相对取向,作为3x1x1x1x1x1矩阵。

+1

这是不正确的 - 广播忽略长度为1的_leading_维度,而不是尾随维度。因此'1x1x1x1x1x3'与'3'相同 – Eric

+0

'numpy'可以在广播过程中添加前导1,但不会忽略它们,无论是前导还是后置。您可以使用“挤压”或索引来删除它们。 – hpaulj

相关问题