2012-01-10 20 views
5

numaralı numaraya göre nasıl indeksleme I bir dizin dizisi verildiğinde,veri dizilerinin değerlerini I'da bulunmayan bir veri dizisi için nasıl ayarlamalıyım?Bu diziyi

Örnek: I ve D'dan A'u nasıl edinebilirim?

I = array([[1,1], [2,2], [3,3]]) 

D = array([[ 1, 2, 3, 4, 5, 6], 
      [ 7, 8, 9, 1, 2, 3], 
      [ 4, 5, 6, 7, 8, 9], 
      [ 1, 2, 3, 4, 5, 6], 
      [ 7, 8, 9, 1, 2, 3]]) 

A = array([[ 0, 0, 0, 0, 0, 0], 
      [ 0, 8, 0, 0, 0, 0], 
      [ 0, 0, 6, 0, 0, 0], 
      [ 0, 0, 0, 4, 0, 0], 
      [ 0, 0, 0, 0, 0, 0]]) 

Düzenleme: I ve d büyük vakalar için tek seferde bunun nasıl yapılacağı arıyorum.

cevap

10

Basit çözüm:

A = zeros(D.shape) 
for i, j in I: 
    A[i, j] = D[i, j] 

Vectörize:

A = zeros(D.shape) 
i, j = I.T 
A[i, j] = D[i, j] 
+0

bunu yapmak için uygun bir vektörleşen yolu var mı? Hem 'D' hem de 'A' büyük olacak, bu yüzden bunun için verimsiz bir şekilde korkuyorum. – ajwood

+0

@ajwood: vectorized versiyonunu çözdü ve yayınladı. –