Wil*_* Gu 6 python numpy convolution scipy
我想知道在1d阵列循环卷积的numpy/scipy中是否有函数.该scipy.signal.convolve()函数仅提供"模式"但不提供"边界",而该signal.convolve2d()函数需要2d数组作为输入.
我需要这样做来比较开放与循环卷积作为时间序列作业的一部分.
通过卷积定理,您可以使用傅里叶变换来获得循环卷积.
import numpy as np
def conv_circ( signal, ker ):
'''
signal: real 1D array
ker: real 1D array
signal and ker must have same shape
'''
return np.real(np.fft.ifft( np.fft.fft(signal)*np.fft.fft(ker) ))
Run Code Online (Sandbox Code Playgroud)
由于这是作业,我遗漏了一些细节.
通过卷积的定义,如果你追加一个信号一个给自己,然后之间的卷积AA和b将包含的循环卷积内一个和b.
例如,请考虑以下事项:
import numpy as np
from scipy import signal
%pylab inline
a = np.array([1] * 10)
b = np.array([1] * 10)
plot(signal.convolve(a, b));
Run Code Online (Sandbox Code Playgroud)
那是标准的卷积.不过现在这个
plot(signal.convolve(a, np.concatenate((b, b))));
Run Code Online (Sandbox Code Playgroud)
在最后一个图中,试着看看循环卷积的结果在哪里,以及如何概括它.
本着 StackOverflow 的精神,您可以复制粘贴此代码:
n = a.shape[0]
np.convolve(np.tile(a, 2), b)[n:2 * n]
Run Code Online (Sandbox Code Playgroud)
这假设 a、b 具有相同的形状。
| 归档时间: |
|
| 查看次数: |
4820 次 |
| 最近记录: |