Numpe

2015-08-29 9 views
6

3-D dizisine 1-D Dizisi Ekleme iki diziyi eklemeye çalışıyorum. O Numpe

array([[[ 1., 1., 1., ..., 1., 1., 1.], 
     [ 2., 2., 2., ..., 2., 2., 2.], 
     [ 3., 3., 3., ..., 3., 3., 3.], 
     ..., 
     [ 7., 7., 7., ..., 7., 7., 7.], 
     [ 8., 8., 8., ..., 8., 8., 8.], 
     [ 9., 9., 9., ..., 9., 9., 9.]], 

     [[ 1., 1., 1., ..., 1., 1., 1.], 
     [ 2., 2., 2., ..., 2., 2., 2.], 
     [ 3., 3., 3., ..., 3., 3., 3.], 
     ..., 
     [ 7., 7., 7., ..., 7., 7., 7.], 
     [ 8., 8., 8., ..., 8., 8., 8.], 
     [ 9., 9., 9., ..., 9., 9., 9.]], 

Yani gelen sütunda matrislerin her girdi ekleme gibi dışarı

np.zeros((6,9,20)) + np.array([1,2,3,4,5,6,7,8,9]) 

şey almak istiyorum. Bir çeşit döngüde kodlayabildiğimi biliyorum ama daha zarif/daha hızlı bir çözüm kullanmaya çalışıyorum.

+0

ile alabilirsiniz. Çıkış dizisinin şekli ne olmalıdır? – Divakar

+0

Bu örnekte, 3-D dizisinin şeklini korumak gerekir, bu nedenle 6,9,20 – psh5017

+0

'dizisi gibi bir çıktı almazsınız ([[[1., 2., 3.,. .., 7., 8., 9.], ... 'ile bu şekildedir' (6,9,20) ', çünkü istenen çıktıdaki son boyutun 9 unsura sahip olduğu ve 20'ye sahip olmadığı görülmektedir. – Divakar

cevap

6

Çok gibi None veya np.newaxis ile ikinci dizinin boyutları uzanan sonra oyuna broadcasting getirebilir -

np.zeros((6,9,20))+np.array([1,2,3,4,5,6,7,8,9])[None,:,None] 
+0

Harika !! !! Teşekkürler!!!!!!!!!!!!!!! – psh5017

0

Sen karo kullanabilirsiniz (ama aynı zamanda doğru şeklini almak swapaxes gerekir) .

A = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) 
B = np.tile(A, (6, 20, 1)) 
C = np.swapaxes(B, 1, 2) 
4

seni doğru anladıysam, kullanılacak en iyi şey NumPy's Broadcasting olduğunu. Kiminle istediğini elde edebilirsiniz şunlardır:

np.zeros((6,9,20))+np.array([1,2,3,4,5,6,7,8,9]).reshape((1,9,1)) 

ben değişkenler olarak şekiller manipüle çalışma adil biraz yaptık çünkü endeksleri için Divakar gösterir şekilde dilim gösterimi kullanılarak etmek reshape method kullanmayı tercih ve Dilimlerden daha değişkenler arasında geçiş yapmak biraz daha kolaydır. Ayrıca bu gibi şeyler yapabilirsiniz:

array1.reshape(array2.shape) 

arada, gerçekten mgrid göz atın bir eksen boyunca N-1 0'dan çalışan bir dizi gibi basit bir arıyorsanız. Yukarıdaki çıktınızı sadece

np.mgrid[0:6,1:10,0:20][1]