Select nearest value on a vector for a given value
1 回表示 (過去 30 日間)
古いコメントを表示
Hi.
I would like to know if you can help me.
I have to get the vector index where its value is closer o nearest to a given value, for example.
i have this vector.
0 1 2 3 4 5 6 7 index
Value -172.0000 | -130.8750 | -89.7500 | -48.6250 | -7.5000 | 33.6250 | 74.7500 | 115.8750 | 157.0000
and if i want to look for the -8, it want to get the index 3 because -8 is between .-48.625 and -7.5, and so on, if i looking for 157, i should get the index 7
i have this code by far, but it isnt working the way i want.
MEQ=[fil,col];
for i=1 :fil%i will store the index in a matrix, so i have to loop over rows
for j=1 :col%loop over matrix columns
for w=1 :numel(recta)%this is the vector
[c,indice]=min(abs(recta-E(i,j)));%here i get the index
MEQ(i,j)=indice;%change the current vector value for the index
end
end
end
can some one give me an idea please
Thank you
0 件のコメント
採用された回答
Roger Stafford
2018 年 3 月 8 日
編集済み: Roger Stafford
2018 年 3 月 8 日
I notice that your vector 'Value' has ascending elements. If we can assume that, the following can be used:
s = -8; % Or whatever value is being sought
index = sum(Value<s)-1;
Note that this will give a -1 result if s is smaller than all the elements of 'Value' or an 8 index if it is greater than all of 'Value'. If you want to prevent these two possibilities, do this afterwards:
index = min(max(index,0),length(Value)-2);
その他の回答 (1 件)
Fangjun Jiang
2018 年 3 月 8 日
Can you use built-in function?
X=10:10:100;
Y=1:10;
out=interp1(X,Y,12,'nearest')
out=interp1(X,Y,18,'nearest')
2 件のコメント
Fangjun Jiang
2018 年 3 月 11 日
Your code above can be replaced with just one line.
MEQ=interp1(recta,(1:length(recta))-2,E,'nearest')
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!