在Matlab中循环遍历多维数组中的两个变量

Loop through two variables in multidimensional array in Matlab

我有一个三维阵列(高光谱图像),我想对两个第一维(每个像素)和第三维(波长)的每个元素重新采样。

我一直在尝试嵌套 for 循环但没有成功,我认为我错误地理解了这个概念。这是我正在尝试的:

    T_Ire = zeros(size(I)); % initialize array

for i = 1:numel(I(:,1,1))
    for t = 1:numel(I(1,:,1))

   step=squeeze(I(i,t,:));
   step=double(step);
   step=step';
   step=resample(step',2,3);
   T_Ire(i,t,:)=step;

    end
end

I 是 3D 阵列(高光谱图像)。

这里有两个问题:

  1. 当您调用 step=resample(step',2,3); 时,您的数组将是原来大小的三分之二。然后,当您尝试将它放回三次矩阵时,它会放不下,因为它的元素较少。您可以通过使用适当的大小初始化 T_Ire 来解决这个问题。

像这样:

T_Ire = zeros(size(I, 1), size(I, 2), size(I, 3) * 2 / 3);
  1. 当您使用数组 I(i,t,:) 时,它的大小将为 1x1xN(其中 N = 第三维的大小)。但是当你调用 step=squeeze(I(i,t,:)); 时,现在它是 Nx1。要将其添加回去,您应该调用 permute or reshape 将其大小调整回 1x1xN

使用permute:

T_Ire(i,t,:) = permute(step, [3 2 1]);

使用reshape:

T_Ire(i,t,:) = reshape(step, [1 1 numel(step)]);