Sto avendo qualche strano comportamento nel mio codice Python relativo a -
e -=
. Sto scrivendo una decomposizione QR utilizzando NumPy, e ho la seguente riga di codice in un doppio ciclo:- vs - = operatori con numpy
v = v - r[i,j] * q[:,i]
dove q
e r
sono entrambi numpy.array
e v
è una fetta di un altro numpy.array
preso come v = x[:,j]
.
Il codice sopra riportato non funziona come previsto in tutti i casi. Tuttavia, se faccio la seguente modifica:
v -= r[i,j] * q[:,i]
Poi tutto funziona perfettamente.
Ho avuto l'impressione che quelle due linee dovrebbero essere identiche. Per verificare se -=
e _ = _ -
stavano lavorando in modo diverso, ho creato il seguente frammento
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
che funziona ancora come previsto, producendo [2 3] [2 3]
ad entrambe le istruzioni di stampa.
Quindi sono del tutto confuso perché quelle due linee hanno prestazioni diverse. L'unica cosa che posso pensare è che a volte ho a che fare con numeri estremamente piccoli (dell'ordine di 10^-8 o più piccoli) e c'è qualche problema di precisione a cui è meglio -=
? La prima riga peggiora sempre di più man mano che gli elementi di x
diventano più piccoli.
Mi scuso se ci sono altri post su questo problema simile, non riesco a cercare -
e -=
e non so se ci sono termini corretti per questi oltre a compiti/operatori.
Grazie per qualsiasi aiuto!
Per riferimento futuro, se si desidera effettuare la ricerca per cose come questa i nomi per '' -' e - = 'sono [' __sub__'] [1] e [ '__isub__'] [2] rispettivamente. Quindi: 'a = a - b' è equivalente a' a = a .__ sub __ (b) ' ' a - = b' è equivalente a 'a .__ isub __ (b)'. (a meno che __isub__ non sia definito, ricade su quanto sopra) [1]: http://pyref.infogami.com/__add__ [2]: http://pyref.infogami.com/__iadd__ –