У меня странное поведение в коде Python, связанное с -
и -=
. Я пишу QR-декомпозицию, используя numpy, и в двойном цикле имеем следующую строку кода:
v = v - r[i,j] * q[:,i]
, где q
и r
оба numpy.array
, а v
- это фрагмент другого numpy.array
, взятого как v = x[:,j]
.
Приведенный выше код не работает должным образом во всех случаях. Однако, если я сделаю следующее изменение:
v -= r[i,j] * q[:,i]
Тогда все работает без нареканий.
У меня сложилось впечатление, что эти две строки должны быть идентичны. Чтобы проверить, работают ли -=
и _ = _ -
по-разному, я создал следующий фрагмент
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
, который снова работает как ожидалось, производя [2 3] [2 3]
в обоих операторах печати.
Так что я совершенно не понимаю, почему эти две строки работают по-разному. Единственная возможная вещь, о которой я могу думать, это то, что я иногда имею дело с чрезвычайно маленькими числами (порядка 10 ^ -8 или меньше), и есть какая-то проблема точности, в которой -=
лучше? Первая строка работает все хуже, так как элементы x
становятся меньше.
Я прошу прощения, если есть какие-либо другие сообщения об этой аналогичной проблеме, я не могу искать -
и -=
, и я не знаю, есть ли какие-либо правильные термины для них, кроме присвоения / операторов.
Спасибо за любую помощь!