How to create a loop to sum across columns conditional on index matching?
이전 댓글 표시
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.
채택된 답변
추가 답변 (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
2016년 10월 28일
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
카테고리
도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!