我正在嘗試為信號實作一維卷積。
它應該具有相同的輸出
ary1 = np.array([1, 1, 2, 2, 1])
ary2 = np.array([1, 1, 1, 3])
conv_ary = np.convolve(ary2, ary1, 'full')
>>>> [1 2 4 8 8 9 7 3]
我想出了這種方法:
def convolve_1d(signal, kernel):
n_sig = signal.size
n_ker = kernel.size
n_conv = n_sig - n_ker 1
# by a factor of 3.
rev_kernel = kernel[::-1].copy()
result = np.zeros(n_conv, dtype=np.double)
for i in range(n_conv):
result[i] = np.dot(signal[i: i n_ker], rev_kernel)
return result
但我的結果是[8,8]
我可能不得不對我的陣列進行零填充并更改其索引。
有沒有更順暢的方法來達到預期的結果?
提前致謝!
uj5u.com熱心網友回復:
這是一個可能的解決方案:
def convolve_1d(signal, kernel):
kernel = kernel[::-1]
return [
np.dot(
signal[max(0,i):min(i len(kernel),len(signal))],
kernel[max(-i,0):len(signal)-i*(len(signal)-len(kernel)<i)],
)
for i in range(1-len(kernel),len(signal))
]
這是一個例子:
>>> convolve_1d([1, 1, 2, 2, 1], [1, 1, 1, 3])
[1, 2, 4, 8, 8, 9, 7, 3]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436249.html
標籤:Python python-3.x 麻木的 信号 卷积
上一篇:Python用決議的單行注釋查找并替換陣列中的多條注釋行
下一篇:訪問矩陣中的元素索引