2012-01-10 12 views
5

Dato un array di indice I, come impostare i valori di un array di dati D i cui indici non esistono in I?Come faccio questo indicizzazione di array in numpy

Esempio: come ottenere A da I e D?

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]]) 

Edit: Sto cercando come fare questo in un colpo solo per i casi in cui I e d sono grandi.

risposta

10

Soluzione semplice:

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

Vectorized:

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

Esiste un modo vettorializzare corretto di farlo? Sia 'D' che' A' saranno grandi, quindi temo questo in un modo inefficiente per farlo. – ajwood

+0

@ajwood: trovato e pubblicato la versione vettoriale. –

Problemi correlati