Tengo un comportamiento extraño en mi código python relacionado con -
y -=
. Estoy escribiendo una descomposición QR usando numpy, y tienen la siguiente línea de código en un bucle doble:- vs - = operadores con numpy
v = v - r[i,j] * q[:,i]
donde q
y r
son tanto numpy.array
y v
es un pedazo de otro numpy.array
tomado como v = x[:,j]
.
El código anterior no funciona como se espera en todos los casos. Sin embargo, si realizo el siguiente cambio:
v -= r[i,j] * q[:,i]
Entonces todo funciona a la perfección.
Tenía la impresión de que esas dos líneas deberían ser idénticas. Para probar si -=
y _ = _ -
estaban trabajando de manera diferente, he creado el siguiente fragmento
import numpy
x = numpy.array(range(0,6))
y = numpy.array(range(0,6))
u = x[3:5]
v = y[3:5]
print u,v
u = u - [1,1]
v -= [1,1]
print u,v
que a su vez funciona como se espera, produciendo en ambos [2 3] [2 3]
declaraciones de impresión.
Así que estoy completamente confundido por qué esas dos líneas funcionan de manera diferente. Lo único posible que se me ocurre es que a veces tengo que lidiar con números extremadamente pequeños (del orden de 10^-8 o menos) y hay algún problema de precisión en que -=
es mejor? La primera línea se vuelve cada vez peor a medida que los elementos de x
se hacen más pequeños.
Pido disculpas si hay otras publicaciones sobre este problema similar, no puedo buscar -
y -=
y no sé si hay términos correctos para estos además de asignación/operadores.
¡Gracias por cualquier ayuda!
para referencia futura si desea buscar cosas como esta los nombres de '' -' y - = 'son [' __sub__'] [1] y [ '__isub__'] [2] respectivamente. Entonces: 'a = a - b' es equivalente a' a = a .__ sub __ (b) ' ' a - = b' es equivalente a 'a .__ isub __ (b)'. (a menos que __isub__ no esté definido, entonces vuelve a aparecer en el anterior) [1]: http://pyref.infogami.com/__add__ [2]: http://pyref.infogami.com/__iadd__ –