所以子集内计数的值出现,设定一个矩阵,像这样:使用SUM和独特的矩阵
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
对不起的解决方案似乎很明显,我的回路的把握是非常差的。
所以子集内计数的值出现,设定一个矩阵,像这样:使用SUM和独特的矩阵
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
对不起的解决方案似乎很明显,我的回路的把握是非常差的。
事实上唯一的一个很好的选择:
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。试试这个(在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]
这很好用,谢谢。阅读“帮助”条目并不能帮助我理解这个论证的工作原理。你会好好解释一下吗? – luser 2012-03-20 16:29:39