如何在数组中找到最后一个非零的元素的索引

时间:2014-11-04 07:24:55

标签: matlab

我有一个大小为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] 

现在,我想获得vector的最后一个元素的索引(具有最大化索引),其范围为non-zero或大于10^-7。对于我的示例,具有值的元素是 0.0442 index=?。如何通过MATLAB实现它?谢谢所有

3 个答案:

答案 0 :(得分:5)

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

在您的情况下,您希望找到超过零的某个容差的最后一个值,即

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

注意:我使用abs(d)以便解决方案对输入中的负值具有鲁棒性,并且我将容差设置为2e-7以增加阈值介于最高之间的可能性可能是好的值和最可能的坏值(将其设置为1e-6可能更安全)。

答案 1 :(得分: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)

等阈值

答案 2 :(得分:0)

您可以结合使用maxcumsum -

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