Ç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?
10
A
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
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.
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ı! –