Быстрое свертывание разреженного 2D-массива с другим 2D-массивом в Python - PullRequest
0 голосов
/ 18 января 2020

У меня есть два двумерных массива (скажем, A и B), и мне приходится часто вычислять свертку между ними; эта операция является узким местом моего кода. A является редким и изменяется от свертки к свертке, в то время как B является плотным, но постоянным по ходу.

В настоящее время я делаю следующее, используя numpy:

result = np.fft.ifft2(np.fft.fft2(A)*B_FT)

, где B_FT = np.fft.fft2(B) - это преобразование Фурье B и вычисляется только один раз.

Мой вопрос: есть ли способ использовать тот факт, что A редок, и ускорить операцию свертки? Если A является разреженным, вычисление свертки в прямом пространстве (а не в пространстве Фурье) должно быть намного быстрее, однако, это может не стоить этого из-за накладных расходов интерпретатора Python. Поэтому мне было интересно, есть ли какие-нибудь скомпилированные библиотеки, которые бы поддерживали его.

...