Filtering rows of a matrix based on some columns
Ältere Kommentare anzeigen
This is an overview of the problem I am having:
Example matrix:
[100 101 32.5;
200 205 50.0;
201 201 0.47;
100 101 60.0;
200 205 25.0]
My actual matrix is thousands of rows long.
And I want to be able to find all rows with common entries in column 1 & 2 AND add corresponding values in column three together. i.e I want something like(adding row 1 & 4 since they have common elements on column 1 & 2; similarly row 2 &5):
[100 101 92.5; 200 205 75.0]
And I want to create a new matrix for any rows with same values on first two columns:
[201 201 0.47]
My data will have a mixture of these two row types.
Thank you
Akzeptierte Antwort
Weitere Antworten (1)
Andrei Bobrov
am 24 Jun. 2012
[a,b,b] = unique( A(:,1:2),'rows' );
B = [a,accumarray(b,A(:,3))];
C = B(abs(diff(B(:,1:2),1,2)) < eps(100),:);
2 Kommentare
MountainKing
am 24 Jun. 2012
Andrei Bobrov
am 24 Jun. 2012
please read about 'accumarray'
B = [a,accumarray(b,A(:,3),[],@mean)];
Kategorien
Mehr zu Logical finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!