我有一些MatLab函数可以计算小波双谱。在这个中,矩阵被初始化,并且在嵌套for循环中计算它们之后将值(复数)放入其中。然而,当我计算整个函数时,我看到花费了三分之一的时间(~1000s)将这些值添加到矩阵中。
矩阵大小为(1025 x 1025),因此输入约1百万个值。如果我生成随机数并以类似的方式将它们放在矩阵中,则需要的时间少于I秒。那么为什么我的代码占用了这么多时间呢?
任何人都可以帮助我吗?
我已经包含了一些代码示例。它将大约百万左右的值放入Bisp矩阵中,耗时超过1000秒。 WT是包含复数值的矩阵,freq是包含与WT矩阵的第一维匹配的所有值的向量。
`
nfreq = 1025;
Bisp = nan(nfreq, nfreq);
Norm = nan(nfreq, nfreq);
for j = 1 : nfreq
for k = 1 : nfreq
f3 = freq(j) + freq(k);
if f3 <= freq(end)
idx3 = find(freq <= f3);
idx3 = idx3(end);
x = (WT(j, :) .* WT(k, :)) .* conj(WT(indx3, :));
bb = nansum(x);
norm1 = nansum(abs(WT(j, :) .* WT(k, :)).^2);
norm2 = nansum(abs(WT(idx3, :).^2));
a = sqrt(norm1 * norm2);
Norm(j, k) = a;
Bisp(j, k) = bb; **This takes about 1000seconds**
end
end
end
`