在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 阵列(高光谱图像)。
这里有两个问题:
- 当您调用
step=resample(step',2,3);
时,您的数组将是原来大小的三分之二。然后,当您尝试将它放回三次矩阵时,它会放不下,因为它的元素较少。您可以通过使用适当的大小初始化 T_Ire
来解决这个问题。
像这样:
T_Ire = zeros(size(I, 1), size(I, 2), size(I, 3) * 2 / 3);
- 当您使用数组
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)]);
我有一个三维阵列(高光谱图像),我想对两个第一维(每个像素)和第三维(波长)的每个元素重新采样。
我一直在尝试嵌套 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 阵列(高光谱图像)。
这里有两个问题:
- 当您调用
step=resample(step',2,3);
时,您的数组将是原来大小的三分之二。然后,当您尝试将它放回三次矩阵时,它会放不下,因为它的元素较少。您可以通过使用适当的大小初始化T_Ire
来解决这个问题。
像这样:
T_Ire = zeros(size(I, 1), size(I, 2), size(I, 3) * 2 / 3);
- 当您使用数组
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)]);