find(vector==value) not working
40 次查看(过去 30 天)
显示 更早的评论
Why does find(vector==value) not work? I am trying to find the index of a value of 0.16 in a vector defined as vector=0:0.01:0.3. find(vector==0.16) should return 17 but returns an empty vector. Why?
0 个评论
采纳的回答
Star Strider
2019-11-13
You have encountered floating-point approximation error. See the documentation on Floating-Point Numbers for a full explanation.
Try this:
vector=0:0.01:0.3;
Result = find(vector<=0.16, 1, 'last');
producing:
Result =
17
0 个评论
更多回答(2 个)
Ruger28
2019-11-13
From the FIND documentation
To find a noninteger value, use a tolerance value based on your data. Otherwise, the result is sometimes an empty matrix due to floating-point roundoff error.
y = 0:0.1:1
y = 1×11
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
k = find(y==0.3)
k = 1x0 empty double row vector
k = find(abs(y-0.3) < 0.001)
k = 4
0 个评论
Thomas Satterly
2019-11-13
While it looks like the 17th value of your vector is 0.16, it's actually slightly off because of floating point precision. What you should do is find the closest value to your target value that's below an acceptable limit. For example:
vector = 0:0.01:0.3;
tolerance = eps * 2; % eps is the floating point number tolerance
target = 0.16;
match = find(abs(vector - target) <= tolerance);
0 个评论
另请参阅
类别
在 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!