Необычное индексирование vs Views в Numpy
В ответе на это уравнение объясняется, что разные идиомы будут давать разные результаты.
Использование идиомы, где причудливое индексирование предназначено для выбора значений, и указанные значения устанавливаются в новое значение в той же строке, означает, что значения в исходном объекте будут изменены на месте.
Однако последний пример ниже:
https://scipy -cookbook.readthedocs.io / items / ViewsVsCopies.html
«Последнее упражнение»
Кажется, что в примере используется та же идиома:
a [x,:] [:, y] = 100
, но он все равно дает другой результат в зависимости от того, является ли x слайсом илиНеобычный индекс (см. ниже):
a = np.arange(12).reshape(3,4)
ifancy = [0,2]
islice = slice(0,3,2)
a[islice, :][:, ifancy] = 100
a
#array([[100, 1, 100, 3],
# [ 4, 5, 6, 7],
# [100, 9, 100, 11]])
a = np.arange(12).reshape(3,4)
ifancy = [0,2]
islice = slice(0,3,2)
a[ifancy, :][:, islice] = 100 # note that ifancy and islice are interchanged here
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
Моя интуиция заключается в том, что если первый набор причудливых индексов является срезом, он обрабатывает объект как представление, и поэтому значения в оригинальном объекте изменяются.
В то время как во втором случае первый набор причудливых индексов сам по себе является причудливым индексом, поэтому он рассматривает объект как причудливый индекс, создавая копию исходного объекта.Это означает, что исходный объект не изменяется при изменении значений объекта копирования.
Правильна ли моя интуиция?
В примере намекает на то, что следует думать о влиянии getitem и setitem Может кто-нибудь объяснить мне это правильно таким способом?