Быстрый способ выбора индексов из массива Numpy

#python #numpy #indexing

#python #numpy #индексирование

Вопрос:

У меня есть большой массив, X из которого я должен выбрать интересное indices , как показано ниже. X равно 60000 x 784 . Я трачу около секунды на выполнение этого при каждом вызове во время цикла.

 %timeit subX = X[:,indices]
890 ms ± 23.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
  

Как я могу быстрее получить доступ к своему массиву? индексы — это list и могут варьироваться от 500 чисел до 784.

Комментарии:

1. Изменение порядка массива на F order может помочь

2. @busybear не могли бы вы, пожалуйста, пояснить?

3. В порядке F массив сохраняется в памяти с первой осью в виде непрерывных данных. Поскольку вы получаете доступ ко всей первой оси (столбцу), возможно, более эффективно хранить данные таким образом, чтобы не приходилось перемещаться по пространству памяти для извлечения данных. В документации будет дано более подробное объяснение. Не уверен, насколько (или если) вы получите прирост производительности при этом. Стоит попробовать.

4. @busybear только что попробовал это. До 230 мс!

5. Приятно! Это достойный толчок. У вас действительно много данных, поэтому будет сложно избежать некоторого замедления.