#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. Приятно! Это достойный толчок. У вас действительно много данных, поэтому будет сложно избежать некоторого замедления.