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

问题描述 投票:0回答:1

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

我一直在尝试嵌套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

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

matlab loops multidimensional-array resampling
1个回答
0
投票

这里有两个问题:

  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。要将其添加回去,您应该调用permutereshape将其重新调整为1x1xN

使用permute

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

使用reshape

T_Ire(i,t,:) = reshape(step, [1 1 numel(step)]);
© www.soinside.com 2019 - 2024. All rights reserved.