计算矩阵的每一行的向量的出现次数

时间:2014-01-31 21:54:58

标签: matlab

给定一个向量v = [2 2]我试图找出它在矩阵中出现的次数,比如说

data_2 =

 2     2
 2     2
 1     2
 2     2
 2     1
 1     2
 2     1
 1     1
 2     2
 2     2

在上面的虚拟示例中,[2 2]出现在总共10行中的5行中。理想情况下,以下代码应该给我相同的答案 -

numel(find(data_2 == repmat(v,size(data_2,1),1)))

然而上面的答案是14.逻辑上我试图简单地计算出现次数,但我必须弄乱MATLAB命令。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用bsxfun,然后all逐行,然后sum

sum(all(bsxfun(@eq, v, data_2),2))

或者使用'rows'选项sum,然后使用sum(ismember(data_2,v,'rows'))

bsxfun

您的方法与我的第一个解决方案类似(repmat本质上是一个隐含的,更快的all;请参阅ismemberhere)。您的代码存在的问题是它会分别计算每列。需要按行numel(find(all((data_2 == repmat(v,size(data_2,1),1)),2))) 将所有列的结果合并为每行一个结果:

sum(...)

或更好地使用numel(find(...))代替sum(all((data_2 == repmat(v,size(data_2,1),1)),2))

{{1}}