3

我有一个标准化的向量(即它的元素之和是1),它们是按降序排列的(即[0.5 0.4 0.09 0.01])。

有没有办法获得总和低于某个阈值的第一个元素的索引?

例如,在我的情况下,对于0.6我将获得的阈值1,的索引(以 Matlab 索引向量元素的方式)0.5。对于0.91I 的阈值,将获得[1 2]的索引[0.5 0.4],依此类推。

我知道我可以通过向量循环来做到这一点,但鉴于我使用的是 Matlab,我想问我是否可以只用一个命令行或 max 2 来做到这一点,从而提高我的代码的计算速度。

4

1 回答 1

4

cumsum函数计算向量元素的累积和。这样做,然后找到阈值小于累积总和的索引将为您提供答案:

V = [0.5 0.4 0.09 0.01]

t = 0.6;

index = find(t < cumsum(V), 1)-1

请注意,如果index = 0,即使对于第一个元素,条件也不成立。

如果您坚持要获得符合条件的元素向量,您可以简单地定义一个范围:

indices = 1 : (find(t<cumsum(V),1)-1)

在这种情况下,indices如果第一个元素不符合条件,则向量为空。

于 2012-10-02T15:16:37.147 回答