Summing values for duplicate rows and columns

I have a vector of rows, columns, and values that I will use to create a sparse matrix:
rows = [1 2 3 1]; columns = [1 1 2 1]; values = [10 50 25 90];
Notice the duplicates:
(1,1) 10 (1,1) 90
What I need is to eliminate (row,column) duplicates by summing the values corresponding to these duplicates for each.
The solution in the current example is:
rows = [1 2 3]; columns = [1 1 2]; values = [100 50 25];
What operation on the three initial vectors reduce them to the solution above?

 采纳的回答

A = accumarray([[1 2 3 1]',[1 1 2 1]'],[10 50 25 90]',[],[],[],1);

3 个评论

Hi Andrei, that didn't appear to work. Please note I have added a little more information under my comment to Walter.
Thank you Andrei, that was very instructive.

请先登录,再进行评论。

更多回答(1 个)

sparse(row, columns, values) is defined to do exactly this kind of totals.
If for some reason you need the simplified outputs afterwards, you can
[r, c, v] = find() on the sparse matrix.

2 个评论

Hi Walter,
I think my explanation needs a little more background. I have coded a procedure for constructing a large transition matrix. I do this by sequentially amending the r, c, v vectors shown below:
r = [r i];
c = [c indx];
s = [s transition_probs(ii,1)];
Unfortunately, due to the underlying process, a given combination of indexes for r and c may carry numerous probabilities. So, once I have finished my procedure, I must sum the values corresponding to duplicate r,c combinations.
result = sparse(r, c, s);
[summary_r, summary_c, summary_s] = find(result);

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by