2011-04-27 47 views
10

Tengo una matriz de 4 dimensiones, es decir, data.shape = (20,30,33,288). Estoy encontrando el índice de la matriz más cerca de n usandoUsando numpy.argmax() en matrices multidimensionales

index = abs(data - n).argmin(axis = 1), so 
index.shape = (20,33,288) with the indices varying. 

me gustaría utilizar data[index] = "values" con values.shape = (20,33,288), pero data[index] devuelve el error "índice (8) fuera de rango (0 < = índice < 1) en la dimensión 0 " o esta operación lleva un tiempo relativamente largo para calcular y devuelve una matriz con una forma que no parece tener sentido.

¿Cómo devuelvo una matriz de valores correctos? es decir,

data[index] = "values" with values.shape = (20,33,288) 

Parece un problema simple, ¿hay una respuesta simple?

Al final me gustaría encontrar index2 = abs(data - n2).argmin(axis = 1), por lo que puedo realizar una operación, decir datos de suma en el índice de datos en index2 sin recorrer las variables. es posible?

Estoy usando python2.7 y numpy versión 1.5.1.

Respuesta

12

Usted debe ser capaz de acceder a los valores máximos indexados por index usando numpy.indices():

x, z, t = numpy.indices(index.shape) 
data[x, index, z, t] 
+0

¿También hay una respuesta cuando uno no conoce el ndim? –

+3

@AndreasMueller: Sí, use 'tup [: axis] + (index,) + tup [axis:]' como índice para 'data', donde' tup' es la tupla devuelta por 'numpy.indices()'. –

1

Si he entendido bien, esto debería funcionar:

numpy.put(data, index, values) 

he aprendido algo nuevo hoy, gracias.

+0

Gracias por la respuesta. No tengo "valores", así que no creo que pueda usar numpy.put. Creo que la respuesta de Sven funcionará. – NPB

Cuestiones relacionadas