Translated by 이 페이지의 내용은 영어에서 자동 번역되었습니다. 자동 번역 기능을 해제하려면 "<a class="turn_off_mt" href="#">여기</a>"를 클릭하십시오.

Sum specific rows of an array

on 23 Jan 2019

on 23 Jan 2019

Andrei Bobrov (view profile)

Hi,
I have an array like:
0.2 2 3
1 3 4
1 4 6
0.8 4 6
2 5 1
1 6 2
0.4 6 2
Now I want to code that MATLAB sums up the values of the 1st column in the rows where the value of the 2nd and 3rd column match.
So the result should look like this below:
0.2 2 3
1 3 4
1.8 4 6
2 5 1
1.4 6 2
I hope someone can help me, thank you!

Bob Nbob

Bob Nbob (view profile)

on 23 Jan 2019
"where the value of the 2nd and 3rd column match."
How do the values of the 2nd and 3rd column match in any of these rows?
In general form this should be fairly easy with logic indexing.
yinki23

yinki23 (view profile)

on 23 Jan 2019
Sorry if I was unspecific.
For example, rows no.3 and no.4 both have 4 and 6 in columns no.2 and no.3. So I want to sum these 2 rows up in column 1 (1+0.8). Same with rows no.6 and no.7.
I hope this helps you understand my question.
James Tursa

James Tursa (view profile)

on 23 Jan 2019
Are the values in columns 2 and 3 always positive integers?

Andrei Bobrov (view profile)

on 23 Jan 2019

A = [0.2 2 3
1 3 4
1 4 6
0.8 4 6
2 5 1
1 6 2
0.4 6 2];
[a,~,c] = unique(A(:,2:3),'rows','stable');
out = [accumarray(c,A(:,1)),a];

yinki23

yinki23 (view profile)

on 23 Jan 2019
Thank you so much! Works perfect for me!

s (view profile)

on 23 Jan 2019

clc;
clear all;
A = [0.2 2 3;1 3 4;1 4 6;0.8 4 6;2 5 1;1 6 2;0.4 6 2];
B = size (A,1);
Result = [];
n = 0;
for i = 1:1:B-1
if (A(i,2) == A(i+1,2) && A(i,3) == A(i+1,3))
n = n+1;
end
end
for j = 1:1:B-n
if (A(j,2) == A(j+1,2) && A(j,3) == A(j+1,3))
Sum = A(j,1)+A(j+1,1);
Result = [Result; Sum A(j,2) A(j,3)]
A([j+1],:) = [];
else
Result = [Result; A(j,1) A(j,2) A(j,3)]
end
end
This should help