Как работают операции Numpy на месте (например, `+ =`)?
Основной вопрос: что происходит под капотом при выполнении:?a[i] += b
Учитывая следующее:
import numpy as np
a = np.arange(4)
i = a > 0
i
= array([False, True, True, True], dtype=bool)
Я это понимаю:
a[i] = x
такой же какa.__setitem__(i, x)
, который присваивает непосредственно элементам, указаннымi
a += x
такой же какa.__iadd__(x)
, который делает сложение на местеНо что происходит, когда я делаю:
a[i] += x
В частности:
Это так же, какa[i] = a[i] + x
? (которая не является операцией на месте)Имеет ли это значение в этом случае, еслиi
является:int
индекс илиndarray
Ораslice
объектФон
Причина, по которой я начал вникать в это, заключается в том, что я столкнулся с неинтуитивным поведением при работе с дублирующимися индексами:
a = np.zeros(4)
x = np.arange(4)
indices = np.zeros(4,dtype=np.int) # duplicate indices
a[indices] += x
a
= array([ 3., 0., 0., 0.])
Более интересные вещи о дублирующих индексах вэтот вопрос.