У меня есть странное поведение в моем коде на 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
.
Я прошу прощения, если есть какие-либо другие сообщения об этой аналогичной проблеме, я не могу найти -
и -=
, и я не знаю, есть ли какие-либо правильные условия для них помимо присваивания/операторов.
Спасибо за любую помощь!