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));
4

4 回答 4

5

您可以通过计算有多少条目小于感兴趣的值增加一来获得上限的索引:

id = sum(value < data)+1; 

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

于 2012-10-02T15:03:51.117 回答
4

如果您的数组以升序方式排序,则 find 命令特别强大:

find (a>0.162,1)
于 2012-10-02T16:09:06.530 回答
2

您可以使用第二个输出min来获取“正确”索引的索引:

[~,index] = min(abs(data-value));

然后检查是否采取了下限或上限,并进行index相应调整:

if value > data(index)  
    index = min(length(data), index+1); end
于 2012-10-02T14:50:24.930 回答
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

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

于 2012-10-02T15:01:45.627 回答