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

3

我在Matlab中有一个如下的向量:

第1列到第4列
0.160000000000000 0.208000000000000 0.244000000000000 0.268000000000000
第5列
0.280000000000000

我想要找到以下值的上限索引:

0.16230400000000

我知道这个值在第1个和第2个索引之间,但我想要找到上限,即在这种情况下是索引2,即使最接近的值在索引1处。在Matlab中如何做到不使用循环来实现?
我找到了以下方法来找到最接近的值,但我总是需要上限。
[c ind] = min(abs(probCum-codComp));

你那里有错误吗?你搜索的值不是大于向量(1),而是小于它。 - angainor
你是说0.106230400000000在0.160000000000000和0.208000000000000之间?! - Yanshuai Cao
抱歉,我多加了一个零,请重新检查我的问题。 - Jorge Zapata
4个回答

5

您可以通过计算小于所需值加一的条目数来获取上限的索引:

id = sum(value < data)+1; 

请注意,如果所有元素都小于感兴趣的值,则data(id)将返回错误,因为id大于data的大小。

我认为你需要在那里加上一个+1,但除此之外很好。 - angainor
@angainor:是的,已经注意到了。当您发表评论时,编辑工作正在进行中。无论如何谢谢您... - H.Muster

4
如果您的数组按升序排序,那么查找命令特别强大:
find (a>0.162,1)

2
您可以使用 min 的第二个输出来获取“正确”索引的指数:
[~,index] = min(abs(data-value));

然后检查是取了哪一个(较小的或者较大的),并相应地调整index

if value > data(index)  
    index = min(length(data), index+1); end

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(V-v>=0, 1, 'first')
ans =

 2

你可以根据自己的需求更改上述表达式中的不等式符号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接