Addition of identical matrix sections

Hello all,
I have the following problem:
I have a nx6 matrix with floating point numbers. Now I want to take the first three columns and see if there are duplicates. The duplicates found are then to be combined with each other. The data of the first three columns should not change and only columns 4 to 6 should be added up. The duplicates of the first three columns are then deleted.
Here is an example:
A = [1 2 3 4 5 6; ...
2 3 4 2 3 1; ...
2 4 2 2 2 2; ...
1 2 3 1 1 1];
--> Reduce
A_new = [1 2 3 5 6 7; ...
2 3 4 2 3 1; ...
2 4 2 2 2 2];
Unfortunately, I could not achieve success with splitapply and accumarray. Is there another Matlab function that can do this or do I have to handle this with an if statement?
Regards
Tom

 Risposta accettata

KSSV
KSSV il 2 Ago 2021
Modificato: KSSV il 2 Ago 2021
Read about unique.
A = [1 2 3 4 5 6; ...
2 3 4 2 3 1; ...
2 4 2 2 2 2; ...
1 2 3 1 1 1];
[c,ia,ib] = unique(A(:,1:3),'rows') ;
m = size(c,1) ;
n = size(A,2) ;
iwant = zeros(m,n) ;
iwant(:,1:3) = c ;
for i = 1:m
iwant(i,4:end) = sum(A(ib==i,4:end),1) ;
end
iwant
iwant = 3×6
1 2 3 5 6 7 2 3 4 2 3 1 2 4 2 2 2 2

3 Commenti

Hello KSSV,
that was quick, thank you very much.
unique strikes out the duplicate lines for me. However, I still want to add columns 4 to 6 to the original row.
A = [1 2 3 4 5 6;
1 2 3 1 1 1];
Becomes A = [1 2 3 5 6 7];
Regards
Tom
Edited the answer.
Perfect, that's exactly what I was looking for. Many thanks!!

Accedi per commentare.

Più risposte (0)

Prodotti

Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by