我有一个矩阵64x64x32x90,代表时间t的x,y,z像素。 我有一个参考信号1x90,它代表我在某个点(x,y,z)的像素所期望的行为。 我正在构建一个新图像,显示每个像素与我的参考之间的相关性。
load('DATA.mat');
ON = ones(1,10);
OFF = zeros(1,10);
taskRef = [OFF ON OFF ON OFF ON OFF ON OFF];
corrImage = zeros(64,64,36);
for i=1:64,
for j=1:63,
for k=1:36
signal = squeeze(DATA(i,j,k,:));
coef = corrcoef(signal',taskRef);
corrImage(i,j,k) = coef(2);
end
end
end
我的过程太慢了。有没有办法摆脱我的循环或调整代码以获得更好的运行时间?
答案 0 :(得分:1)
重塑您的数据,使其前三个维度合并为一个(所以现在有64 * 64 * 32行和90列)。
然后使用pdist2
(带'correlation'
选项)计算每行与预期模式的相关性。
最后,将结果重塑为所需的形状。
DATA2 = reshape(DATA, [],90);
corrImage = 1 - pdist2(DATA2, taskRef, 'correlation');
corrImage = reshape(corrImage, 64,64,32);