所以,假定一个像这样的矩阵:
20 2
20 2
30 2
30 1
40 1
40 1
我想计算第1列的每个唯一值发生1的次数。我可以通过[sum(x(1:2,2)== 1)]为每个值做很长的事情,但是我认为这将是UNIQUE功能的完美用途。我怎么能修复它以便我得到这样的输出:
20 0
30 1
40 2
对不起,如果解决方案看起来很明显,我对循环的把握非常差。
答案 0 :(得分:2)
确实,独特是一个不错的选择:
u=unique(x(:,1))
res=arrayfun(@(y)length(x(x(:,1)==y & x(:,2)==1)),u)
分开最后一行:
@(y)length(x(x(:,1)==y & x(:,2)==1))
,它查找条件x(:,1)==y & x(:,2)==1)
所在的x部分的长度(称为逻辑索引)。因此,对于每个唯一元素,它会在X中找到第一行是唯一元素的行,第二行是一行。答案 1 :(得分:1)
尝试此操作(在this answer中指定):
>>> [c,~,d] = unique(a(a(:,2)==1))
c =
30
40
d =
1
3
>>> counts = accumarray(d(:),1,[],@sum)
counts =
1
2
>>> res = [c,counts]
答案 2 :(得分:1)