假设我有2个向量:
a=[0 1 0 1 1 0 1 0 0 0 1 1 1];
b=[1 1 1 1 1 1 2 2 2 3 3 3 3];
对于b中的每组数字,我想要积累,所以结果看起来应该是这样的:
c=[1 3;2 1;3 3]
这意味着我有b 3中的那些,b中的第2组我只有一个等等。
答案 0 :(得分:4)
到目前为止,有一些复杂的答案。试试accumarray(b',a')
。
答案 1 :(得分:3)
如果您正在寻找b
可以是任何内容的解决方案,那么hist
和unique
的组合将有所帮助:
num = unique(b(logical(a))); %# identify the numbers in b with non-zero counts
cts = hist(b(logical(a)),num); %# count
c = [num(:),cts(:)]; %# combine.
如果您希望c
的第一列从1变为b
的最大值,那么您可以将第一行重写为num=1:max(b)
,并且您还可以获得行在c
中,计数为零。
答案 2 :(得分:2)
假设b
单调增加1:
c = cell2mat(transpose(arrayfun( @(x) [ x sum(a(find( b == x ))) ], min(b):max(b), 'UniformOutput',false)))
应以单行格式给出正确答案,或:
for ii=min(b):max(b)
II = find( b == ii );
v = sum(a(II));
c(ii,:) = [ii v];
end
这有点容易阅读。希望这会有所帮助。