2014-11-04 115 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)) 
相關問題