2012-04-07 16 views
10

Çok boyutlu bir diziyi (yani, ndarray türünde) belirli bir eksen boyunca NumPy'de kopyalar oluşturmadan düzleştirmenin bir yolu olup olmadığını merak ediyorum. Örneğin, bir dizi 2B görüntü var ve her bir vektörü düzleştirmek istiyorum. Yani, bunu yapmanın kolay bir yolu numpy.array([im.flatten() for im in images]), ancak her birinin kopyalarını oluşturur.NumPy'de kopyalar oluşturmadan çok boyutlu bir dizinin eksenleri nasıl düzleştirilir?

cevap

12

ravel o:

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

ya reshape o:

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

Çoğu durumda, bu her ikisi bir kopyası daha özgün dizi bir görünümü döndürür. Eğer girdi dizisinin şeklini bilmiyorsanız

+0

Teşekkür ederiz! 'yeniden şekillendir' benim için hile yaptı. 2D matrislerim ve vektörlerim arasındaki bire bir haritalamayı kırmadan önce düşündüm. Ama hayır, işe yaradı! –

7

:

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

-1 kalan boyutlarını çalışmak için yeniden şekillendirmek söyler. Bu, görüntülerin ilk eksenini düzleştirmek istediğinizi varsayar.