индексирование массива numpy: индекс индекса и индекс np.array дают разные результаты

Я пытаюсь индексировать np.array, используя список и индексы np.array . Но они дают разные результаты.

Вот иллюстрация:

 import numpy as np x = np.arange(10) idx = [[0, 1], [1, 2]] x[np.array(idx)] # returns array([[0, 1], [1, 2]]) 

но прямо применить список дает ошибку

 x[idx] # raises IndexError: too many indices for array 

Я ожидаю, что приведенное выше возвращает тот же результат, что и индекс np.array . Любые идеи почему?

Я использую python 3.5 и numpy 1.13.1 .

2 Solutions collect form web for “индексирование массива numpy: индекс индекса и индекс np.array дают разные результаты”

Если это массив, он интерпретируется как форма конечного массива, содержащего индексы, но если это список, это индексы по «измерениям» (индексы многомерных массивов).

Итак, первый пример (с array ) эквивалентен:

 [[x[0], x[1], [x[1], x[2]] 

Но второй пример ( list ) интерпретируется как:

 [x[0, 1], x[1, 2]] 

Но x[0, 1] дает IndexError: too many indices for array потому что ваш x имеет только одно измерение.

Это потому, что list s интерпретируется так, как будто это был кортеж, который идентичен передаче их «отдельно»:

 x [[0, 1], [1, 2]]
           ^^^^^^ ----- индексы для второго измерения
   ^^^^^^ ------------- индексы для первого измерения

Из документации индексирования numpy :

ndarrays можно индексировать с использованием стандартного синтаксиса Python x[obj] , где x – это массив и obj выбор.


Базовая нарезка возникает, когда obj – это объект среза (построенный по start:stop:step нотация в start:stop:step внутри скобок), целое число или кортеж объектов и целых объектов. Ellipsis и объекты newaxis могут перемежаться вместе с ними. Чтобы оставаться обратно совместимым с обычным использованием в Numeric, базовая нарезка также инициируется, если объектом выбора является любая последовательность, отличная от ndarray (например, list ), содержащая объекты slice , объект newaxis или объект newaxis , но не для целые массивы или другие встроенные последовательности . …

  • Windows Scipy Install: не найдено ресурсов Lapack / Blas
  • Панды: Эффективно разделяющие записи
  • Для цикла кажется более быстрым, чем интерполяция NumPy / SciPy 3D
  • Могу ли я установить float128 в качестве стандартного флота-массива в numpy
  • Опустить линии соединения в графике matplotlib, например y = tan (x)
  • Матрица DFT в python
  • Не удалось распаковать изображение в OpenCV
  • восстановить dict из массива 0-d numpy
  • Python - лучший язык программирования в мире.