How to create a loop to sum across columns conditional on index matching?
Show older comments
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.
Accepted Answer
More Answers (2)
The following produces a result B, such that B(1,:) is the consolidation of all rows of A with index 1, B(2,:) all rows with index 2, etc...
m=size(A,1);
p=max(A(:,1));
B=sparse(A(:,1),1:m,1,p,m)*A(:,2:end);
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
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!