2016-07-13 71 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