2013-01-23 12 views
25

bir dizi yeniden şekillendirme:aşağıdaki biçimde (sadece bir örnek) bir dizi göz önünde numpy

[[ 0 1] 
[ 2 3] 
[ 4 5] 
[ 6 7] 
[ 8 9] 
[10 11] 
[12 13] 
[14 15] 
[16 17]] 

Bu şekil var [9,2].

[[ 0 6 12] 
[ 2 8 14] 
[ 4 10 16]] 
[[ 1 7 13] 
[ 3 9 15] 
[ 5 11 17]] 

en belirgin (ve elbette "olmayan pythonic") çözeltisi sıfır bir dizi başlatmak için: her sütun, bu gibi bir şekil [3,3] olacak şekilde Şimdi dizi dönüştürmek istediğiniz uygun boyutta ve verilerle doldurulacağı iki for-döngüyü çalıştırın. Ben ... `b` şimdi yerinde yeniden şekillenen edilemez, yani bitişik olmadığını

cevap

40
a = np.arange(18).reshape(9,2) 
b = a.reshape(3,3,2).swapaxes(0,2) 

# a: 
array([[ 0, 1], 
     [ 2, 3], 
     [ 4, 5], 
     [ 6, 7], 
     [ 8, 9], 
     [10, 11], 
     [12, 13], 
     [14, 15], 
     [16, 17]]) 


# b: 
array([[[ 0, 6, 12], 
     [ 2, 8, 14], 
     [ 4, 10, 16]], 

     [[ 1, 7, 13], 
     [ 3, 9, 15], 
     [ 5, 11, 17]]]) 
+15

Not dile uygun olan bir solüsyon ilgileniyorum:' b.reshape (9, 2) ' aynı verinin bir görünümünü değil, bir kopyasını döndürür ve 'b.shape = (9, 2)' artar ve hata verir. – Jaime

+3

@Jaime tarafından çok önemli bir yorum, Şekil'in amacı bir klon olmadan iyimser yeniden boyutlandırmaya izin vermektir. Büyük veri kümeleriyle büyük anlaşma – deepelement

İlgili konular