我有一个矢量d
,它的大小为1x1000
。它存储从0
到1
的随机值。例如如何找到数组中非最后一个元素的索引
d=[0.0076 0.4629 0.1554...0 0 0 0 ...0.0442 0 0 0 10^-7 10^-7 10^-7]
现在,我想在最后载体来获得元素的索引(有指数最大化)受non-zero
或大于10^-7
)。对于我的示例,具有值的元素是0.0442和index=
?。如何通过MATLAB实现它?感谢所有
我有一个矢量d
,它的大小为1x1000
。它存储从0
到1
的随机值。例如如何找到数组中非最后一个元素的索引
d=[0.0076 0.4629 0.1554...0 0 0 0 ...0.0442 0 0 0 10^-7 10^-7 10^-7]
现在,我想在最后载体来获得元素的索引(有指数最大化)受non-zero
或大于10^-7
)。对于我的示例,具有值的元素是0.0442和index=
?。如何通过MATLAB实现它?感谢所有
找到满足条件的最后一个元素,你可以使用语法find(tf, 1, 'last')
。
在你的情况,你想找到的最后一个值大于一定的公差远离零以上,即
tol = 2e-7;
idx = find(abs(d)>tol, 1, 'last');
注:我用abs(d)
,使该解决方案具有较强的抗负值在输入中,我将容差设置为2e-7
以增加阈值处于最可能的良好值和最可能的错误值(将其设置为1e-6可能更安全)之间的可能性。
ind = find(d ~= 0);
ind(end) = % last nonzero index
d(ind(end)) = % last nonzero element
您可以添加阈值:ind = find(d > 1e-7)
如果你也有消极的数据,你可以添加阈值一样ind = find(d > 1e-7 | d < -1e-7)
怎么样,如果我想忽略10^-7(非常小的值) – user3051460 2014-11-04 07:33:32
可以使用的组合max
和cumsum
-
tol = 1e-7; %// tolerance value
[~,index] = max(cumsum(d>tol))
良好'last',谢谢。 – Rashid 2014-11-04 07:56:31
我认为它必须是idx = find(abs(d)> tol,1,'last'); – user3051460 2014-11-04 08:13:10
@ user3051460:哎呀,这是一个非常致命的错字! – Jonas 2014-11-04 08:14:52