comparing matrix elements and performing operation if equal

27 views (last 30 days)
Mahi Nazir on 14 Nov 2013
Edited: Maaz Rao on 5 Jul 2019
If I have a matrix
A=
18 18 1
17 20 2
18 18 1
17 25 2
19 16 3
18 18 1
19 17 3
I want to scan through the matrix and when ever the first column elements are equal, the 3rd column elements should get added up
e.g: the resultant matrix should be
18 18 1
17 20 2
18 18 2
17 25 4
19 16 3
18 18 3
19 17 6

1 Comment

Maaz Rao on 5 Jul 2019
My problem is also the same i just have one little extension that whenever the elemnts in column 1 and 3 both are repeated elsewhere in matrix then only third column should get added up
e.g
A=
18 18 1
17 20 2
18 18 1
17 25 2
19 17 3
18 18 1
19 17 3
18 18 1
17 20 2
18 18 2
17 25 2
19 17 3
18 18 3
19 17 6

Simon on 14 Nov 2013
Edited: Simon on 14 Nov 2013
Hi!
% get indices of unique values
[~, ~, c] = unique(A(:, 1));
% loop over all unique values
for n = 1:max(c)
ind = n==c;
% cumulative sum
cs = cumsum(A(ind, 3));
% set third column
A(ind, 3) = cs;
end

1 Comment

Mahi Nazir on 14 Nov 2013
Brilliant! Thanks a ton