свертка питона без заполнения - PullRequest
0 голосов
/ 05 сентября 2018

Я ищу простой способ реализации 2D-свертки из двух n-dim массивов без дополнения в python. Я нашел функцию

scipy.ndimage.convolve(input, weights, output=None, mode='constant', cval=0.0, origin=0)

, который, кажется, делает именно то, что я хочу, но только чуть-чуть. Функция предоставляет несколько опций для заполнения в пограничном регионе, но, насколько я знаю, НЕТ опции без какого-либо отступа, что меня действительно удивляет.

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


редактирование: извините, но я перепутал взаимосвязь и свертку. На самом деле я имел в виду КОРРЕЛЯЦИЯ.

1 Ответ

0 голосов
/ 05 сентября 2018

Попробуйте это:

from scipy import signal
sig = np.repeat([0., 1., 0.], 100)
win = signal.hann(50)
#filtered = signal.convolve(sig, win, mode='valid') / sum(win)
filtered = signal.correlate(sig, win, mode='valid') / sum(win)
print(len(sig), len(filtered))
# 300 251
plt.plot(sig)
plt.show()
plt.plot(filtered)
plt.show()

enter image description here

...