2014-11-04 79 views
2

我有一个矢量d,它的大小为1x1000。它存储从01的随机值。例如如何找到数组中非最后一个元素的索引

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.0442index=?。如何通过MATLAB实现它?感谢所有

回答

5

找到满足条件的最后一个元素,你可以使用语法find(tf, 1, 'last')

在你的情况,你想找到的最后一个值大于一定的公差远离零以上,即

tol = 2e-7; 
idx = find(abs(d)>tol, 1, 'last'); 

注:我用abs(d),使该解决方案具有较强的抗负值在输入中,我将容差设置为2e-7以增加阈值处于最可能的良好值和最可能的错误值(将其设置为1e-6可能更安全)之间的可能性。

+0

良好'last',谢谢。 – Rashid 2014-11-04 07:56:31

+0

我认为它必须是idx = find(abs(d)> tol,1,'last'); – user3051460 2014-11-04 08:13:10

+0

@ user3051460:哎呀,这是一个非常致命的错字! – Jonas 2014-11-04 08:14:52

3
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)

+0

怎么样,如果我想忽略10^-7(非常小的值) – user3051460 2014-11-04 07:33:32

0

可以使用的组合maxcumsum -

tol = 1e-7; %// tolerance value 
[~,index] = max(cumsum(d>tol)) 
相关问题