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
。当然,这些都不是什么大问题,因为所建议的方法显然是正确的,但似乎没有必要改变这些值。