Как работают операции 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), который присваивает непосредственно элементам, указаннымia += 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.])

Более интересные вещи о дублирующих индексах вэтот вопрос.

Ответы на вопрос(4)

Ваш ответ на вопрос