存储矩阵指数最小

时间:2011-04-29 14:14:15

标签: matlab matrix

我有一个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的值。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您的代码需要工作,我猜测in是您要比较的数组。

开始时,你可以摆脱第三个for循环,然后执行:

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

最后一个表达让我困惑: kar总是> = 0(来自abs函数)所以你不需要检查它...更糟糕的是,它总会返回1!所以你会永远得到kar的第一个索引。你试过了吗?

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