2012-01-10 23 views
5

Dada una matriz de índices I, cómo puedo establecer los valores de una matriz de datos D cuyos índices no existen en I?¿Cómo hago esta indexación de matrices en numpy

Ejemplo: ¿Cómo obtengo A de I y 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]]) 

Editar: Estoy buscando la manera de hacerlo de una sola vez para los casos en Id y son grandes.

Respuesta

10

solución simple:

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

vectorizado:

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

¿Hay alguna forma vectorizada correcta de hacerlo? Tanto 'D' como' A' serán grandes, así que me temo que esto es una forma ineficiente de hacerlo. – ajwood

+0

@ajwood: descifrado y publicado la versión vectorizada. –

Cuestiones relacionadas