【问题标题】:store index of matrix for minimum存储矩阵的索引为最小值
【发布时间】:2011-04-29 23:57:29
【问题描述】:

我有一个二维矩阵Ac(yr,j)
我希望它将它的每个值与另一个一维数组进行比较,并存储绝对最小值即将到来的数组的值。

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 的值。

【问题讨论】:

  • 你有什么理由索引为1.5-0.5,2.5-0.5,... 而不仅仅是1,2,3...

标签: matlab matrix


【解决方案1】:

您需要如下所示调用max 以获得index 而不是value

[~, 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)

【讨论】:

    【解决方案2】:

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

    首先,您可以摆脱第三个 for 循环,然后执行以下操作:

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

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

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

    ?

    【讨论】:

    • 是的。对不起,它写得不正确,你对不必要使用 kar>0 是对的;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2018-08-29
    • 2017-06-17
    相关资源
    最近更新 更多