Intercambio de filas en Numpy

En Python puedo intercambiar 2 variables por medio de múltiples afectaciones; Funciona también con listas:

l1,l2=[1,2,3],[4,5,6] l1,l2=l2,l1 print(l1,l2) >>> [4, 5, 6] [1, 2, 3] 

Pero cuando quiero intercambiar 2 filas de una matriz numpy (por ejemplo, en el algoritmo de Gauss), falla:

 import numpy as np a3=np.array([[1,2,3],[4,5,6]]) print(a3) a3[0,:],a3[1,:]=a3[1,:],a3[0,:] print(a3) >>> [[1 2 3] [4 5 6]] [[4 5 6] [4 5 6]] 

Pensé que, por una extraña razón, las dos columnas ahora apuntaban a los mismos valores; pero no es el caso, ya que a3[0,0]=5 después de las líneas anteriores cambia a3 [0,0] pero no a3 [1,0].

He encontrado cómo hacer con este problema: por ejemplo a3[0,:],a3[1,:]=a3[1,:].copy(),a3[0,:].copy() funciona. Pero, ¿alguien puede explicar por qué el intercambio con múltiples afectaciones falla con muchas filas? Mis preguntas se refieren al trabajo subyacente de Python y Numpy.

Esto funciona de la manera que usted pretende:

 a3[[0,1]] = a3[[1,0]] 

Las dos asignaciones separadas en la asignación de tupla no se almacenan en búfer entre sí; uno sucede después del otro, liderando la sobreescritura de su observación