How to sum up of sum unique arrays in a matrix

8 Ansichten (letzte 30 Tage)
Moe
Moe am 14 Nov. 2014
Beantwortet: Roger Stafford am 14 Nov. 2014
Suppose I have a matrix a:
a = [12,7,1,1,1,1;28,5,2,1,1,1;28,4,2,2,1,1;32,10,2,1,1,1;32,10,2,2,1,1;37,2,4,1,1,1;48,11,4,1,1,1;72,10,2,1,1,1;72,10,2,2,1,1;73,1,4,1,1,1;73,6,2,1,1,1;73,7,2,2,1,1];
first array in each row is a unique id of that row. So, some of rows have same unique id. I need a matrix that give me sum up all arrays with unique id (for example: (2,2) with (3,2); (2,4) with (3,4)). such as:
b = [12,7,1,1,1,1;28,9,4,3,2,2;32,20,4,3,2,2;37,2,4,1,1,1;48,11,4,1,1,1;72,20,4,3,2,2;73,14,8,4,3,3];
Such as this example:

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 14 Nov. 2014
Bearbeitet: Azzi Abdelmalek am 14 Nov. 2014
[ii,jj,kk]=unique(a(:,1))
out=[ii cell2mat(accumarray(kk,1:numel(kk), [],@(x) {sum(a(x,2:end),1)}))]

Weitere Antworten (2)

Roger Stafford
Roger Stafford am 14 Nov. 2014
Assuming like IDs are already grouped together as in your example,
t = [true;diff(a(:,1))~=0;true];
b = [zeros(1,size(a,2)-1);cumsum(a(:,2:end),1)];
b = [a(t(2:length(t)),1),diff(b(t,:))];

Matt J
Matt J am 14 Nov. 2014
Bearbeitet: Matt J am 14 Nov. 2014
fun=@(v) { [ a(v(1),1), sum(a(v,2:end),1) ] };
result = cell2mat( accumarray(a(:,1) , (1:size(a,1)).', [] , fun) )

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by