# Question about logical calculation in matrix

1 view (last 30 days)
kingsley on 26 Sep 2017
Edited: Jan on 26 Sep 2017
I want to sum up the numbers on the 1st column if its corresponding numbers on the 2nd column =1; and if sum up the numbers on the 1st column if its corresponding numbers on the 2nd column =2; The answer should be r1=0.5 r2=1.4 I don't know where I made mistakes. Here is the code I have so far. PLEASE HELP ME OUT。
AA=[0.2 1;0.3 1;0.5 2;0.9 2];
for i = 1:4
if AA(i,2)<2
r1=zeros(1);
r1=r1+AA(i,1);
else
r2=zeros(i,1);
r2=r2+AA(i,1)
end
end

Jan on 26 Sep 2017
Edited: Jan on 26 Sep 2017
The mistake is the zeros inside the loop, which resets the counter repeatedly:
AA = [0.2 1; 0.3 1; 0.5 2; 0.9 2];
r1 = 0; % BEFORE the loop
r2 = 0;
for i = 1:4
if AA(i,2)<2
r1 = r1 + AA(i,1);
else
r2 = r2 + AA(i,1);
end
end
Or smarter without a loop:
match = (A(:, 2) == 1);
r1 = sum(A(match, 1));
r1 = sum(A(~match, 1));

### More Answers (1)

Stephen23 on 26 Sep 2017
Edited: Stephen23 on 26 Sep 2017
Just use accumarray:
>> AA = [0.2,1;0.3,1;0.5,2;0.9,2]
AA =
0.20000 1.00000
0.30000 1.00000
0.50000 2.00000
0.90000 2.00000
>> accumarray(AA(:,2),AA(:,1))
ans =
0.50000
1.40000
>>