给定一个向量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命令。任何帮助将不胜感激。
答案 0 :(得分:1)
sum(all(bsxfun(@eq, v, data_2),2))
或者使用'rows'
选项sum
,然后使用sum(ismember(data_2,v,'rows'))
:
bsxfun
您的方法与我的第一个解决方案类似(repmat
本质上是一个隐含的,更快的all
;请参阅ismember
或here)。您的代码存在的问题是它会分别计算每列。需要按行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}}