Dada una matriz,Reemplazar subarreglos en numpy
>>> n = 2
>>> a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]]]*n)
>>> a
array([[[1, 1, 1],
[1, 2, 3],
[1, 3, 4]],
[[1, 1, 1],
[1, 2, 3],
[1, 3, 4]]])
Yo sé que es posible sustituir los valores en forma sucinta como tal,
>>> a[a==2] = 0
>>> a
array([[[1, 1, 1],
[1, 0, 3],
[1, 3, 4]],
[[1, 1, 1],
[1, 0, 3],
[1, 3, 4]]])
¿Es posible hacer lo mismo para toda una fila (último eje) en la matriz? Sé que a[a==[1,2,3]] = 11
funcionará y reemplazará todos los elementos de los subarreglos coincidentes por 11, pero me gustaría sustituirlo por un subcampo diferente. Mi intuición me dice que escriba lo siguiente, pero se produce un error,
>>> a[a==[1,2,3]] = [11,22,33]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: array is not broadcastable to correct shape
En resumen, lo que me gustaría conseguir es:
array([[[1, 1, 1],
[11, 22, 33],
[1, 3, 4]],
[[1, 1, 1],
[11, 22, 33],
[1, 3, 4]]])
... yn es, por supuesto, en en general, mucho más grande que 2, y los otros ejes también son más grandes que 3, por lo que no quiero repetirlos si no es necesario.
Actualización: El [1,2,3]
(o cualquier otra cosa que estoy buscando) no siempre es en el índice 1. Un ejemplo:
a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]], [[1,2,3],[1,1,1],[1,3,4]]])
¡Brillante! No pensé en 'dónde'. – Karol