2016-09-25 22 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

相關問題