Необычное индексирование против просмотров в Numpy - PullRequest
0 голосов
/ 24 октября 2018

Меня смущает другая часть статьи в прикрепленной ссылке:

https://scipy -cookbook.readthedocs.io / items / ViewsVsCopies.html

В разделе «Но причудливое индексирование иногда возвращает представления, не так ли?»

Первая идиома:

a = np.arange(10)
a[[1,2]] = 100
a
#array([  0, 100, 100,   3,   4,   5,   6,   7,   8,   9])

Вторая идиома:

a = numpy.arange(10)
c1 = a[[1,2]]
c1[:] = 100
a
#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c1
#array([100, 100])

Я все еще немного озадачен тем, как первая идиома способна вносить изменения?

Они объясняют, что первая идиома не вызывает getitem до setitem но почему он этого не делает?

Я думал, что все причудливые индексы возвращали копию данных, а не представление, независимо от используемой идиомы?

Хотя причудливая индексация не создает представление, как они демонстрируют, поскольку оно все еще даетжелаемый результат, все еще считается хорошей практикой использовать его, как показано в идиоме 1?

1 Ответ

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

Причина в том, как работает Python.

Первый оператор вызывает метод setitem, второй getitem.Первый не создает новый объект, но второй создаст (для необычной индексации он создаст представление для регулярной индексации).

И, конечно, мы хотим, чтобы такое поведение было таким, чтобы мы могли установить некоторыезначения в массиве, которые не являются «обычными» и где представление не будет работать.

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