Matlab 如何找到数组中最后一个非零元素的索引
我有一个向量Matlab 如何找到数组中最后一个非零元素的索引,matlab,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] 现在,我想得到向量最后一个元素的索引(最大化索引),服从非零或大于10^-7)。例如,具有值的元素是0.0442和index=?。如何用MATLAB实现?谢谢大家 ind = find(d ~= 0); ind(end) = % last nonzero index d(ind(e
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]
现在,我想得到向量最后一个元素的索引(最大化索引),服从非零
或大于10^-7
)。例如,具有值的元素是0.0442和index=
?。如何用MATLAB实现?谢谢大家
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)
来查找满足条件的最后一个元素,您可以使用语法find(tf,1,'last')
在您的情况下,您希望找到最后一个距离零超过某个公差的值,即
tol = 2e-7;
idx = find( abs(d)>tol, 1, 'last');
注意:我使用了
abs(d)
,因此解决方案对输入中的负值具有鲁棒性,我将公差设置为2e-7
,以增加阈值介于最有可能的好值和最有可能的坏值之间的可能性(将其设置为1e-6可能更安全) 您可以使用max
和cumsum
-
tol = 1e-7; %// tolerance value
[~,index] = max(cumsum(d>tol))
如果我想忽略10^-7(非常小的值)好关于
last
,谢谢。我想它一定是idx=find(abs(d)>tol,1,'last')@用户3051460:哎呀,这是一个相当致命的打字错误!为什么您要使用abs(d)
而不是d
?我认为没有要求绝对值。还有,为什么您要将公差设置为2e-7
,而不是所需的1e-7
。当然,这些都不是什么大问题,因为所建议的方法显然是正确的,但似乎没有必要改变这些值。