在排序向量中查找上限索引

时间:2012-10-02 14:45:20

标签: matlab vector

我在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));

4 个答案:

答案 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

您还可以更改上述表达式中的不等式以满足您的需求。