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?

 채택된 답변

Andrei Bobrov
Andrei Bobrov 2017년 7월 10일
편집: Andrei Bobrov 2017년 7월 10일

0 개 추천

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.
corrected
Thank you Andrei, that was very instructive.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2017년 7월 10일

0 개 추천

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에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by