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

 Accepted Answer

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 Comments

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!!

Sign in to comment.

More Answers (0)

Products

Release

R2020b

Asked:

on 2 Aug 2021

Commented:

on 2 Aug 2021

Community Treasure Hunt

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

Start Hunting!