【问题标题】:Loop through two variables in multidimensional array in Matlab在Matlab中循环遍历多维数组中的两个变量
【发布时间】:2016-11-15 09:50:52
【问题描述】:

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

我一直在尝试嵌套 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 数组(高光谱图像)。

【问题讨论】:

    标签: matlab loops multidimensional-array resampling


    【解决方案1】:

    这里有两个问题:

    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)]);
    

    【讨论】:

      猜你喜欢
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      相关资源
      最近更新 更多