Matlab 最小值矩阵的存储索引

Matlab 最小值矩阵的存储索引,matlab,matrix,Matlab,Matrix,我有一个二维矩阵Acyr,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)); e

我有一个二维矩阵Acyr,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  
我能找到最小的正值,但不能找到它即将到来的值

您需要如下所示调用,以获取索引而不是值

为了摆脱嵌套循环,您可以尝试。定义要对每个数组元素执行的操作

function [index] = myMinFunction(value, data)
    [val, index] = min(abs(data - value));
end
执行定义的操作

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

你的代码需要修改,我猜你要比较的是数组

首先,您可以去掉第三个for循环,只需执行以下操作:

actin=Ac(yr,j);
kar = abs(in-actin)
最后一个表达让我困惑: 从abs函数来看,kar始终大于等于0,因此您无需检查它。。。更糟糕的是,它总是返回1!所以你总是会得到kar的第一个索引。您是否尝试过:

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

是否有任何理由将索引设置为1.5-0.5,2.5-0.5,。。。而不是仅仅1,2,3…是的。很抱歉,它的书写不正确,关于不必要地使用kar>0,您是对的;
dab(yr,j)=min(kar);