scipy.signal.fft只围绕一个轴:它怎么做?

时间:2015-04-15 12:16:44

标签: python numpy scipy fft

我想使用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吗?

2 个答案:

答案 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相加得到的列向量。