我在Matlab编码,但有兴趣听听有关如何在其他语言中实现此建议的建议。
比方说,我有一个3D(m,n,t)矩阵 M 。我想运行一个迭代for循环,循环遍历每个 i (1:m),每个 j (1:n),然后计算互相关 t 表示循环中的当前( i , j )对,每个可能( i , j )矩阵中的组合。因此,每个( i , j )总共有n * m个相关的相关性。
我已将其写为下面的一种伪代码,但无法思考如何正确实现它。不幸的是,在Matlab中,' corrcoef'函数不允许你在函数本身内迭代1:m,1:n。
任何帮助都会很棒!
M = randn(m,n,t);
Xcor_vals = zeros(m,n,m*n);
for i = 1:m
for j = 1:n
R = Xcor(M(i,j,:),M(1:m,1:n,:));
Xcor_vals(i,j,:) = R;
end
end
答案 0 :(得分:1)
你是怎么说“用其他语言实现的”?什么语言?在matlab中我会先找fft。
m=40;n=30;t=100;
M = randn(m,n,t);
Mf = fft(M,[],3);
现在你可以乘法和ifft得到所有m和n与点i和j的互相关。
tic
Xcorr_vals = nan(m,n,m,n,t);
for i = 1:m
for j = 1:n
Xcorr_vals(i,j,:,:,:) = ifft(conj(Mf(i,j,:)).*Mf,[],3);
end
end
toc
经过的时间是4.24秒。