Fanccy Indexing vs View в Numpy часть II - PullRequest
       0

Fanccy Indexing vs View в Numpy часть II

0 голосов
/ 24 октября 2018

Необычное индексирование 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 Может кто-нибудь объяснить мне это правильно таким способом?

1 Ответ

0 голосов
/ 24 октября 2018

Python оценивает каждый набор [] отдельно.a[x, :][:, y] = 100 - это 2 операции.

temp = a[x,:]           # getitem step
temp[:,y] = 100         # setitem step

Завершение модификации 2-й строки a зависит от того, является ли temp представлением или копией.

Помните, numpy - этоаддон к Python.Он не изменяет основной синтаксис или интерпретацию Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...