Основной вопрос: что происходит под капотом при выполнении: 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
:- a
int
index или - a
ndarray
или - a
slice
объект
- a
Фон
Причина, по которой я начал размышлять, заключается в том, что я столкнулся с неинтуитивным поведением при работе с повторяющимися индексами:
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.])
Более интересный материал о дублирующих индексах в этом вопросе.