我在Matlab中有一个大小为65536 x 192
的数据集Sig。如果我想取一维fft沿着第二维,我可以使用for循环:
%pre-allocate ect..
for i=1:65536
F(i,:) = fft(Sig(i,:));
end
或者我可以指定维度而不使用for循环:
F = fft(Sig,[],2);
对我的数据集来说快了20倍。
我已经为离散小波变换(dwt)寻找类似的东西,但无法找到它。所以我想知道是否有人知道在Matlab中跨指定维度做dwt的方法?还是必须使用for循环?
在您的循环FFT示例中,似乎您在行上操作。Matlab使用列主顺序。这或许可以解释表现上的差异。如果对列进行操作,性能是否相同?如果这是正确的解释,您可以在循环中使用dwt
。
如果您确实需要性能,一个解决方案是按照您想要的方式执行自己的MEX调用C离散小波变换库。
我假设你正在使用小波工具箱中的函数:http://www.mathworks.co.uk/help/toolbox/wavelet/ref/dwt.html
文档似乎没有描述对数组的操作,所以可能不支持。如果它允许你输入一个数组,那么它将在第一个非单元素维度上操作,或者它将忽略形状并将其视为一个向量。