我想使用scipy.signal.fftconvolve
('full'
类型)使用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
吗?
答案 0 :(得分:1)
您可以使用numpy.apply_along_axis:
执行此操作out_signal = numpy.apply_along_axis(convolve1d, axis, in_signal)
函数convolve1d是:
def convolve1d(array1d):
return sp.signal.fftconvolve(array1d, self._coeffs, 'full')
或者(感谢下面Matthias的评论),您可以使用apply_along_axis的* args和** kwargs输入在一行中完成:
out_signal = numpy.apply_along_axis(convolve1d, axis, in_signal,
self._coeffs, 'full')
答案 1 :(得分:0)
根据2D阵列或矩阵所需的结果类型,您可以执行诸如对列进行求和以及生成行向量的1D FFT之类的操作,或者将行和1D FFT相加得到的列向量。