2016-07-13 57 views
0

我有个问题,我希望你的帮助。在Matlab中的多维数组中循环槽两个变量

我有一个三维数组(高光谱图像),我想对两个第一维(每个像素)的第三维(波长)的每个元素进行resample。

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

感谢您的关注

最好成绩 埃米利亚诺

回答

0

这里有两个问题:

  1. 当你调用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。要将其添加回来,您应该致电permutereshape将其重新调整回1x1xN
  • 使用permute

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

    使用reshape

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

    很多感谢队友!第一部分做到了!干杯 – Emiliano