我有一个大小为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]
现在,我想获得vector的最后一个元素的索引(具有最大化索引),其范围为non-zero
或大于10^-7
。对于我的示例,具有值的元素是 0.0442 和index=
?。如何通过MATLAB实现它?谢谢所有
答案 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)
您可以结合使用max
和cumsum
-
tol = 1e-7; %// tolerance value
[~,index] = max(cumsum(d>tol))