#numpy #matrix
Вопрос:
У меня есть массив из 1 и нулей, называемый a. например:
a=
[[0,0,1,1,1,0],
[0,0,0,0,0,0],
[1,0,0,0,0,1],
[0,0,0,0,1,0],
[0,0,0,1,0,0],
[0,0,1,0,0,1]]
и ядро (k):
k =
[[0,0,1]
[0,1,0]
[1,0,0]]
Я хочу найти все экземпляры k внутри a.
Я хочу, чтобы результат свертки был:
conv(a,k) =
[[0,0,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,0,1,0],
[0,0,0,1,0,0],
[0,0,0,0,0,0]]
Есть ли встроенная функция?
Я знаю, что это можно сделать с помощью циклов for, но это слишком медленно для больших массивов. Тнх
Комментарии:
1. Если вас устраивает scipy, у него есть метод свертки: docs.scipy.org/doc/scipy/reference/generated/…
Ответ №1:
Можно применить свертку с помощью numpy.fft
from numpy.fft import fft2, ifft2
def np_fftconvolve(A, B):
return np.real(ifft2(fft2(A)*fft2(B, s=A.shape)))