2015-12-21 34 views
0

我試圖想出一個辦法做到沒有環如下:如何優雅地概括爲載體的重複指數在MATLAB

可以說我有一個載體x這裏我總結的一些元素e成。我也有一個指數ids的矢量,它表示要將值發送到哪個元素x。即

x = zeros(1,4); 
e = [ 1 10 100 1e3 1e4]; 
ids = [1 1 2 4 3]; 

我願做這樣

x(ids) = x(ids) + e 

的東西,將返回

x = 

      11   100  10000  1000 

,因爲我們提到X(1)的兩倍,而取而代之的則返回

x = 

      10   100  10000  1000 
+5

使用'accumarray':'accumarray(ids,e)'。 – Divakar

回答

4

accumaray對於做這樣的技巧非常有用。在你的情況:

accumarray(ids',e) 

會做這項工作。

+0

像@Divakar在[他的評論]中提到的(http://stackoverflow.com/questions/34405192/how-to-elegantly-sum-into-repeated-indices-of-a-vector-in-matlab#comment56552235_34405192)確實。怎麼了轉置?這是沒有必要的。 – Adriaan

+2

@Adriaan我認爲這是'ids'所需要的,當它是一個行向量。所以,爲了使它適用於任何矢量,我們可以使用'accumarray(ids(:),e)'。不過'e'上的轉置並不需要。 – Divakar

+0

OP具有作爲行向量的id,並且準確者將將其解釋爲5維向量的一個索引。轉移e不是必需的,那是我的錯誤。 –