如何在3D数组中运行迭代互相关?

时间:2018-04-30 10:18:53

标签: python matlab for-loop multidimensional-array cross-correlation

我在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

1 个答案:

答案 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秒。