2017-05-08 24 views
2

比方說,我有一個看起來這麼一個載體(數字總是會> 0)...集團和元素是一個矢量在同一

[1, 2, 1, 4, 1, 2, 4, 3] 

我需要一個量化的實現,資金將這些數字放在一起,並使用原始數字作爲存儲該數字的索引。所以,如果我運行它,我會得到...

% step 1 
[1+1+1, 2+2, 3, 4+4] 

% step 2 
[3, 4, 3, 8] 

我已經實現了這個使用for循環,但我覺得有來實現這一量化的方式。我在向量化函數方面還是很新穎的,所以我很感激任何幫助。

回答

3

這聽起來像accumarray工作:

v = [1, 2, 1, 4, 1, 2, 4, 3]; 
result = accumarray(v(:), v(:)).' 

result = 

    3  4  3  8 
2

其他方法:

  • 使用histcounts

    x = [1, 2, 1, 4, 1, 2, 4, 3]; 
    u = unique(x); 
    result = u.*histcounts(x, [u inf]); 
    
  • 使用bsxfun(可能更多內存密集型) :

    x = [1, 2, 1, 4, 1, 2, 4, 3]; 
    u = unique(x); 
    result = u .* sum(bsxfun(@eq, x(:), u(:).'), 1); 
    
+0

如果範圍小且數量大,則histcounts是一種合理的方法,其次任何零不是劇。 – Holmz

相關問題