我在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循环吗?
答案 0 :(得分:2)
在循环FFT示例中,您似乎在线上操作。 Matlab使用Column-major order。它可以解释性能的差异。如果您对列进行操作,性能是否相同?
如果这是正确的解释,您可以在循环中使用dwt
。
答案 1 :(得分:1)
如果您真的需要性能,那么解决方案就是让您自己的MEX以您想要的方式调用C离散小波变换库。
答案 2 :(得分:0)
我认为你正在使用Wavelet Toolbox中的函数:http://www.mathworks.co.uk/help/toolbox/wavelet/ref/dwt.html
文档似乎没有描述对数组的操作,因此可能不支持。如果它确实允许你输入数组,那么它将在第一个非单例维度上运行,或者它将忽略形状并将其视为向量。