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

How to run an iterative cross-correlation within a 3D array?

我正在用Matlab进行编码,但有兴趣听到有关如何用其他语言实现此建议的信息。

例如,我有一个3D(m,n,t)矩阵M。我想运行一个迭代的for循环,该循环将循环遍历每个i(1:m)和每个j(1:n),然后使用矩阵中的每种可能(i,j)组合,计算循环中当前(i,j)对沿t的互相关。因此,每个(i,j)总共具有n * m个相关的相关性。

我在下面将其写为一种伪代码,但无法考虑如何正确实现它。不幸的是,在Matlab中," corrcoef"函数不允许您在函数本身中迭代1:m,1:n。

任何帮助都会很棒!

1
2
3
4
5
6
7
8
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


"用其他语言实现"是什么意思?什么语言?在matlab中,我会先去fft。

1
2
3
m=40;n=30;t=100;
M = randn(m,n,t);
Mf = fft(M,[],3);

现在,您可以乘以和ifft来获得所有m和n与点i和j的互相关。

1
2
3
4
5
6
7
8
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

Elapsed time is 4.24 seconds.