2012-10-02 43 views
3

我有一個正規化向量(即其元素之和爲1),並且它們是有序遞減的(即[0.5 0.4 0.09 0.01])。Matlab - 獲得通過某一和限制的向量的元素的索引

是否有一種方法可以獲得第一個元素的索引,他們的總和剛剛低於某個閾值?

例如,在我的情況下,爲0.6一個閾值I會獲得1,索引(w.r.t。到索引向量元素的Matlab的方式)的0.5。對於0.91的閾值,我將獲得[1 2],指數[0.5 0.4]等等。

我知道我可以通過向量循環做到這一點,但考慮到我使用Matlab,我想問我是否可以只用一個命令行或最大2來做到這一點,從而提高計算速度我的代碼。

+2

在你的向量上使用cumsum並且看[這裏](http://stackoverflow.com/questions/12692586/find-upper-bound-index-in-sorted-vector) – angainor

回答

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載體的情況下,空。

+1

爲了選擇結果向量,'find'是不必要的,您可以使用邏輯索引:'result = V(cumsum(V)

相關問題