индексирование массива 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 , но не для целые массивы или другие встроенные последовательности . …

  • setup.py для пакетов, которые зависят как от cython, так и от f2py
  • Самый быстрый способ преобразования массива Numpy в разреженный словарь?
  • Как умножить двумерный массив numpy с массивом numpy 1D?
  • Объединение массивов NumPy
  • Преобразовать массив NumPy в cvMat cv2
  • Быстрая интерполяция по трехмерному массиву
  • Оптимальный способ вычисления парной взаимной информации с использованием numpy
  • Как выполнить итеративную 2D-операцию в массиве 4D numpy
  • Установка numpy на Amazon EC2
  • Выбор протокола Python?
  • Коэффициенты корреляции и значения p для всех пар строк матрицы
  • Python - лучший язык программирования в мире.