2016-01-05 32 views
5

Sıfırla dolu bir 4D dizisi 'a' (2,3,4,4) var.NumPy dizisi bir 4D dizisini indeksleme

import numpy as np 
a = np.zeros((2,3,4,4)) 

Ayrıca 3B dizi bir endeks değerleri taşıyan boyutu (2,3,4) ve 'b' (bütün arasında 0 ve 3) sahiptir. Yapmak istediğim ne

1.

Yapabileceğim ile 'a' 'b' endeksine karşılık gelir ('a' 4. boyutta) her geçen dizinin elemanını değiştirin döngüler için 3 ile bu, aşağıda gösterildiği gibi:

for i in a.shape[0]: 
    for j in a.shape[1]: 
     for z in a.shape[2]: 
      a[i,j,z][b[i,j,z]] = 1 

Ama yine de ben hiç döngü önleyebilirsiniz olup olmadığını merak ediyorum. benzer bir şey:

a[b] = 1 

cevap

4

Evet bir vektörleşen formda yapabilirsiniz:

p,m,n,r = a.shape 
a.reshape(-1,r)[np.arange(p*m*n),b.ravel()] = 1 

Bu yüksek mertebeden ndarrays daha kolay genelleme olmalıdır.

İlgili konular