【问题标题】:Matlab - obtaining indices for the elements of a vector which pass a certain sum limitMatlab - 获取通过某个总和限制的向量元素的索引
【发布时间】:2012-10-02 15:13:05
【问题描述】:

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

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

例如,在我的例子中,对于0.6 的阈值,我将获得10.5 的索引(w.r.t. 到 Matlab 索引向量元素的方式)。对于0.91 的阈值,我将获得[1 2][0.5 0.4] 的索引,等等。

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

【问题讨论】:

  • 在向量上使用 cumsum 并查看 here

标签: matlab


【解决方案1】:

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 向量为空,以防第一个元素不符合条件。

【讨论】:

  • 对于选择结果向量,find 是不必要的,您可以使用逻辑索引:result = V(cumsum(V)&lt;t)
猜你喜欢
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多