2014-03-29 168 views
9

當我使用numpy.shape()檢查數組的形狀時,我有時會得到(length,1),有時會得到(length,)。它看起來像是一個列與行向量......不過,它似乎並沒有改變任何有關數組本身[除了一些函數抱怨,當我通過形狀(length,1)]數組。一維陣列形狀(長度,)與(長度,1)與(長度)

這兩者有什麼區別?
爲什麼形狀不正好,(length)

回答

5

的要點是,說的載體可以看出無論是作爲

  • 矢量
  • 僅帶有一列的矩陣
  • 3維陣列,其中所述第二和第三維具有全長
  • ...

你可使用np.squeeze添加使用[:, np.newaxis]語法或尺寸下降尺寸:

>>> xs = np.array([1, 2, 3, 4, 5]) 
>>> xs.shape 
(5,) 
>>> xs[:, np.newaxis].shape # a matrix with only one column 
(5, 1) 
>>> xs[np.newaxis, :].shape # a matrix with only one row 
(1, 5) 
>>> xs[:, np.newaxis, np.newaxis].shape # a 3 dimensional array 
(5, 1, 1) 
>>> np.squeeze(xs[:, np.newaxis, np.newaxis]).shape 
(5,) 
+0

它是明確的'列',而不是一排? (也就是說它可以被看作'有一行的矩陣'嗎?) – DilithiumMatrix

+1

@zhermes'xs [:,np.newaxis]'是一列矩陣,'xs [np.newaxis,:]'是一行矩陣 –

2

(長度)數組是一個數組,其中每個元素是一個數字,並且數組中有長度元素。 (length,1)數組是一個也有長度元素的數組,但每個元素本身都是一個具有單個元素的數組。例如,以下使用長度= 3。

>>> import numpy as np 
>>> a = np.array([[1],[2],[3]]) 
>>> a.shape 
>>> (3, 1) 
>>> b = np.array([1,2,3]) 
>>> b.shape 
>>> (3,) 
5

在Python,(length,)是一個元組,一個1個項目。 (length)只是圍繞數字的括號。

numpy中,數組可以具有任意數量的維數0,1,2等。您正在詢問1維和2維對象之間的區別。 (length,1)是一個2元組元組,給出了2d數組的維數。

如果您習慣使用MATLAB,那麼您可能會對所有數組都是二維或更大的事實感到困惑。

+0

什麼是零維數組的例子? – Sarang

+1

'np.array(1)'。 Shape是'()','ndim'是0。 – hpaulj