13 views (last 30 days)

Hello, I have a binary matrix, with a corresponding index in the first column. For example:

A = [1 1 0 1 0 0 1 ..0]

1 0 0 0 1 1 0 ..1

2 ...

2 ...

2 ...

3 ...

[... ... ]

I want to sum all binary elements corresponding to 1 in the index, 2 in the index, etc. (i.e. index is =1 in the first and second row,so sum across each column, and so on). For the index, the number of corresponding rows with same index number varies across the dataset. I would appreciate all help and advice on how to do this.

Chris Dischner
on 25 Oct 2016

What about something like this?

Assuming your index values are sequential:

aMax = max(A(:,1));

for i = 1:aMax

aSum(i,:) = sum(A(A(:,1) == i,:));

end

Will get you the sums. You can use modular arithmetic to get you to the bit representation

(eg, 1+1+1 = 3 ==> 3 mod 2 = 1

Matt J
on 27 Oct 2016

I get the summation vector for each i with some values >1, which should not be the case since it's strictly binary and cannot exceed 1 in any column sum, for any i

The chances are excellent that it is the input data's fault and not the code's, i.e, that you have not successfully fulfilled the condition "cannot exceed 1 in any column sum, for any i". There is no reason this should be the case just because A(:,2:end) are all zeros and ones.

Teja Muppirala
on 28 Oct 2016

result = [unique(A(:,1)) grpstats(A(:,2:end),A(:,1),@any)] % Keep it binary

or

result = [unique(A(:,1)) grpstats(A(:,2:end),A(:,1),@sum)] % Take the sum

Opportunities for recent engineering grads.

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

Start Hunting!
## 2 Comments

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/309104-how-to-create-a-loop-to-sum-across-columns-conditional-on-index-matching#comment_401485

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/309104-how-to-create-a-loop-to-sum-across-columns-conditional-on-index-matching#comment_401485

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/309104-how-to-create-a-loop-to-sum-across-columns-conditional-on-index-matching#comment_401905

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/309104-how-to-create-a-loop-to-sum-across-columns-conditional-on-index-matching#comment_401905

Sign in to comment.