我在Matlab中有一个类似下面的矢量。
Columns 1 through 4 0.160000000000000 0.208000000000000 0.244000000000000 0.268000000000000 Column 5 0.280000000000000
我想找到以下值的上限索引:
0.16230400000000
我知道这个值在1°和2°索引之间,但我想找到上限,在这种情况下是索引2,即使最接近的值是索引1.我如何在Matlab中得到它没有循环?
我找到了以下方法来找到最接近的值,但我总是需要上限。
[c ind] = min(abs(probCum-codComp));
答案 0 :(得分:5)
您可以通过计算有多少条目小于感兴趣的值增加一个来获得上限的索引:
id = sum(value < data)+1;
请注意,如果所有元素都小于感兴趣的值,data(id)
将返回错误,因为id
大于data
的大小。
答案 1 :(得分:4)
如果您的数组以升序排序,则find命令特别强大:
find (a>0.162,1)
答案 2 :(得分:2)
您可以使用min
的第二个输出来获取“正确”索引的索引:
[~,index] = min(abs(data-value));
然后检查是否采用了下部或上部,并相应地调整index
:
if value > data(index)
index = min(length(data), index+1); end
答案 3 :(得分:2)
您可以从矢量中减去搜索的值并观察符号
V = [0.1600 0.2080 0.2440 0.2680 0.2800];
v = 0.162304;
V-v
ans =
-0.0023 0.0457 0.0817 0.1057 0.1177
现在您可以find
此向量中的第一个非负数条目 - 这是您的上限
find(V-v>=0, 1, 'first')
ans =
2
您还可以更改上述表达式中的不等式以满足您的需求。