Numpy elegante indexación y asignación
Normalmente numpy obliga a que coincidan el lado izquierdo y derecho de una tarea, por ejemplo, si lo hagoa[:] = b
, b
debe tener la misma forma o transmitirse a la misma forma quea
. Pero parece haber una excepción a esa regla:
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a.copy()
>>> a[[0,1,2]] = b[::2]
>>> a
array([0, 2, 4, 3, 4, 5, 6, 7, 8, 9])
>>> a[np.arange(10)] = b[:2]
>>> a
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
Parece que solo funciona con matrices 1d y solo si hay una indexación elegante en el lado izquierdo de la asignación, pero no he podido encontrar documentación para este comportamiento en ninguna parte. ¿Está documentado este comportamiento, si es así, dónde, y también alguien puede dar un ejemplo de cuándo podría ser útil?
Actualizar
Parece que el tipo de aplanador numpy también se comporta de esta manera, ¿hay alguna conexión entre el aplanador y la indexación elegante que no conozco?
>>> a.flat = [10,11]
>>> a
array([10, 11, 10, 11, 10, 11, 10, 11, 10, 11])
>>> a.flat[:] = [2,3,4]
>>> a
array([2, 3, 4, 2, 3, 4, 2, 3, 4, 2])
>>> a.flat = range(100)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])