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