我想使用scipy.signal.fftconvolve
('full'
类型)通过1D内核过滤信号。
但是,唉,有时我有多维数组,也应该由1D过滤器过滤(沿着一些指定的轴)。
我现在正在使用这个代码:
if len(original_shape) == 0:
raise ValueError("in_signal should be an array, not scalar")
elif len(original_shape) == 1:
out_signal = sp.signal.fftconvolve(in_signal, self._coeffs, 'full')[out_signal.size]
else:
for index in np.ndindex(original_shape[1:]):
slice_index = (slice(None),) + index
out_signal[slice_index] = sp.signal.fftconvolve(
in_signal[slice_index], self._coeffs, 'full')[:original_shape[0]]
return out_signal
我可以用一些东西来代替fftconvolve
吗?
3条答案
按热度按时间i1icjdpr1#
你可以用numpy.apply_along_axis来实现:
其中函数convolve1d是:
或者(感谢Matthias下面的评论),你可以用apply_沿着_axis的 *args和**kwargs输入在一行中完成:
b0zn9rqh2#
根据您需要从2D数组或矩阵中获得的结果类型,您可以执行一些操作,例如对列求和并对结果行向量进行1D FFT,或者对行求和并对结果列向量进行1D FFT。
igsr9ssn3#
假设
in_signal
是2维的,并且您希望在最后一个维度应用卷积,则可以执行以下操作: