2012-04-07 26 views
10

我想知道是否有一種方法可以沿給定座標軸將多維數組(即ndarray類型)展平,而無需在NumPy中進行復制。例如,我有一個2D圖像陣列,我希望將每個圖像平鋪到一個矢量上。所以,一個簡單的方法是numpy.array([im.flatten() for im in images]),但是它會創建每個的副本。如何平鋪多維數組的軸而不在NumPy中複製?

回答

12

ravel它:

>>> a = numpy.arange(25).reshape((5, 5)) 
>>> b = a.ravel() 
>>> b[0] = 55 
>>> a 
array([[55, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

或者reshape它:

>>> a = numpy.arange(27).reshape((3, 3, 3)) 
>>> b = a.reshape((9, 3)) 
>>> b[0] = 55 
>>> a 
array([[[55, 55, 55], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]], 

     [[18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26]]]) 

在大多數情況下,這些都返回原數組的視圖,而不是一個副本。

+0

謝謝! 「重塑」爲我做了訣竅。我之前想過會打破我的2D矩陣和向量之間的一對一映射。但不,不起作用! – 2012-04-07 06:00:33

7

如果你不知道你的輸入數組的形狀:

images.reshape((images.shape[0], -1)) 

-1告訴重塑制定出其餘尺寸。這假設你 想平坦的第一軸的圖像。

相關問題