¿Cómo modificar una matriz Numpy 2D en cada fila pero los índices de columna específicos?

Esto es lo que estoy haciendo ahora para lograr lo que quiero.

In: a=numpy.zeros((3,2)) a[range(a.shape[0]),[0,0,1]] = 1 a Out: array([[ 1., 0.], [ 1., 0.], [ 0., 1.]]) 

Como puede ver, usé la función de range para seleccionar todas las filas en un archivo. ¿Hay alguna otra forma más limpia de seleccionar cada fila?

Hacer esto específicamente se puede hacer de manera más limpia, ya que solo estás construyendo una matriz de un solo foco, y hay buenas respuestas para las formas “limpias” de hacer esto en un solo numpy . Recomiendo este por @MartinThoma:

 a = np.eye(2)[[0,0,1]] 

Además, la mayoría de los paquetes de aprendizaje automático tienen su propio método de encoding en caliente que será incluso más eficiente y “limpio” que este, ya que el aprendizaje automático es el uso más común de la encoding en caliente.

Sin embargo, en general, no es posible eliminar la coordenada de range al hacer este tipo de indexación sofisticada. Realmente no hay una manera clara y explícita de representar esa operación que no sería confusa cuando se quiere extender la representación más allá de 2 dimensiones. Y trabajar en más de 2 dimensiones a la vez es el punto numpy