¿Cómo configurar un elemento único de la matriz Numpy multidimensional utilizando otra matriz Numpy?

Si tenemos una matriz numpy como:

Array = np.zeros((2, 10, 10)) 

Y queremos establecer un elemento de ello, dado por otro.

 indexes = np.array([0,0,0]) 

¿Cómo podemos hacer eso?

 Array[indexes] = 5 

está configurando todos los elementos de la PRIMERA dimensión de Array a 5

Con a como la matriz de datos e idx como la matriz de índices, de modo que cada fila corresponda a un elemento que se configurará en la matriz de datos, podría hacer:

 a[tuple(idx.T)] = 5 

Ejecución de la muestra

 In [94]: a = np.zeros((2,2,3),dtype=int) In [95]: idx = np.array([[0,0,0],[1,1,0],[0,1,2]]) In [96]: a[tuple(idx.T)] = 5 In [97]: a Out[97]: array([[[5, 0, 0], [0, 0, 5]], [[0, 0, 0], [5, 0, 0]]]) In [98]: a[tuple(idx.T)] = [5,10,15] # or set different values In [99]: a Out[99]: array([[[ 5, 0, 0], [ 0, 0, 15]], [[ 0, 0, 0], [10, 0, 0]]]) 

Alternativamente, podríamos calcular los índices lineales con np.ravel_multi_index y luego realizar la asignación con np.put , de esta forma:

 np.put(a,np.ravel_multi_index(idx.T,a.shape),5) 

Si está tratando con matrices tridimensionales, podríamos cortar los índices tridimensionales y asignarlos para tener otro método, como por ejemplo:

 a[idx[:,0],idx[:,1],idx[:,2]] = 5 

Si solo es necesario configurar un elemento, simplemente haga

 a[tuple(idx)] = 5 

Ejecución de la muestra

 In [118]: a = np.zeros((2,2,3),dtype=int) In [119]: idx = np.array([0,0,0]) In [120]: a[tuple(idx)] = 5 In [121]: a Out[121]: array([[[5, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0]]])