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.