Быстрая нарезка с NumPy - PullRequest
       20

Быстрая нарезка с NumPy

0 голосов
/ 25 января 2019

В моем приложении A и jj даны как плоские, 1-мерные массивы. У jj нет строго регулярного паттерна. Мы можем адресовать ломтик JJ из A с помощью:

A = np.arange(10)
jj = np.array([3,5,6])
A[jj]

Это называется «причудливой нарезкой» и называется медленным. Есть ли способ ускорить доступ с чем-то вроде

A = np.arange(10)
jj = np.array([3,5,6])
ii = slice(jj)
A[ii]

Этот пример не работает, но, возможно, есть еще один простой способ. Команда slice быстрая и привлекательная . Есть ли способ превратить jj-numpy-array в slice(jj) с остаточным приростом эффективности?

(Contex: построить многократную матрицу большой системы в вычислительной гидродинамике с переменными коэффициентами). Спасибо за некоторые подсказки!

1 Ответ

0 голосов
/ 25 января 2019

К сожалению, поскольку у вас нет регулярного шаблона, нет лучшего способа, чем модная индексация. Это единственный способ.

Причина, по которой он медленнее, заключается в том, что индексирование срезов не копирует значение, так как вы можете создать представление с необходимыми шагами. Для нерегулярных шаблонов вы можете только копировать данные. Следовательно, это будет медленнее.

...