2011-04-29 83 views
0

我有一個2d矩陣Ac(yr,j)
我希望它將它的每個值與另一個1D數組進行比較,並存儲絕對最小值即將到來的數組值。矩陣的最小存儲索引

for yr=1:32, 
    for j=1:12, 
     for in=1.5:1:32.5, 
      actin=Ac(yr,j); 
      kar(in-0.5)=abs(in-actin); 
      dab(yr,j)=min(kar(kar>=0));    
     end   
    end 
end 

我能夠找到最少的正值,但不是它所來的in的值。

+0

有沒有什麼原因,你爲什麼索引爲'1.5-0.5','2.5-0.5',...而不是隻是'1,2,3 ...' – abcd 2011-04-29 14:24:13

回答

0

你需要調用max在爲了得到指數代替的圖所示。

[~, dab(yr,j)] = min(kar(kar>=0)); 


爲了擺脫嵌套的循環,你可以嘗試arrayfun的。定義要在每個數組元素上執行的操作。

function [index] = myMinFunction(value, data) 
    [val, index] = min(abs(data - value)); 
end 

執行定義的操作。

dab = arrayfun(@(x)myMinFunction(x, in), Ac) 
+0

thnx它的工作。 :) – Ashton 2011-04-29 23:06:41

0

你的代碼需要工作,我猜in是你想要比較的數組。

出發了,你可以擺脫第三的for循環,只是做:

actin=Ac(yr,j); 
kar = abs(in-actin) 

最後的表達方式讓我爲難: KAR總是> = 0(從ABS功能),所以你不要不需要檢查它......更糟的是,它總是會返回1!所以你會永遠得到卡爾的第一個索引。您是否嘗試過:

dab(yr,j)=min(kar); 

+0

是的。對不起,它沒有正確書面,你是正確的關於不必要的使用卡爾> 0; – Ashton 2011-04-29 23:06:01