Matlab 最小值矩阵的存储索引
我有一个二维矩阵Acyr,j。 我希望它将它的每个值与另一个1D数组进行比较,并存储绝对最小值所在数组的值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
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);