неточная расширенная индексация неточной документации? - PullRequest
0 голосов
/ 02 февраля 2019

Согласно numpy doc

Определение расширенной индексации означает, что x [(1,2,3),] принципиально отличается от x [(1,2,3)].Последний эквивалентен x [1,2,3], который вызовет базовый выбор, тогда как первый вызовет расширенную индексацию.Обязательно поймите, почему это происходит.

и

Расширенное индексирование запускается, когда объект выбора, obj, является объектом последовательности без кортежей , ndarray (с типом данных integer или bool) или кортеж, по крайней мере, с одним объектом последовательности или ndarray (с типом данных integer или bool).Существует два типа расширенной индексации: целочисленная и логическая.


Однако в моем собственном тестировании оказалось, что даже для наборов, если он не имеет по крайней мереодин объект среза, или один np.newaxis, или один объект Ellipse, тогда он будет запускать расширенное индексирование

import numpy as np

arr = np.zeros(shape=(5,5,5))
arr[(1,2,3)].flags.owndata       # evaluates to True


Это правильное поведение?

1 Ответ

0 голосов
/ 02 февраля 2019
In [5]: arr = np.zeros(shape=(5,5,5))

Это базовая индексация с набором индексов:

In [6]: arr[(1,2,3)]
Out[6]: 0.0
In [7]: type(_)
Out[7]: numpy.float64

Результатом является элемент, а не массив (или представление массива).Это то же самое, что:

In [8]: arr[1,2,3]
Out[8]: 0.0
In [9]: type(_)
Out[9]: numpy.float64

Подобные скалярные элементы всегда имеют свои данные.Я уточню это в своем ответе на недавний вопрос о is:

https://stackoverflow.com/a/54485031/901925

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