如何 运行 3D 数组中的迭代互相关?
How to run an iterative cross-correlation within a 3D array?
我正在使用 Matlab 编写代码,但很想听听有关如何在其他语言中实现它的建议。
例如我有一个 3D (m,n,t) 矩阵 M。我想要 运行 一个迭代循环,它将循环遍历每个 i (1 : m) 和每个 j (1 : n) 然后计算当前 (i, j) 对沿 t 的互相关在循环中,矩阵中有 every 可能的 (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
"implemented in other languages" 是什么意思?什么语言?在 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
Elapsed time is 4.24 seconds.
我正在使用 Matlab 编写代码,但很想听听有关如何在其他语言中实现它的建议。
例如我有一个 3D (m,n,t) 矩阵 M。我想要 运行 一个迭代循环,它将循环遍历每个 i (1 : m) 和每个 j (1 : n) 然后计算当前 (i, j) 对沿 t 的互相关在循环中,矩阵中有 every 可能的 (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
"implemented in other languages" 是什么意思?什么语言?在 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
Elapsed time is 4.24 seconds.