给定一个向量,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命令。任何帮助,将不胜感激。
sum(all(bsxfun(@eq, v, data_2),2))
或ismember
与'rows'
选项一起使用,然后sum
:
sum(ismember(data_2,v,'rows'))
您的方法与我的第一个解决方案相似(bsxfun
本质上是一种隐式,更快的方法repmat
;请参见此处或此处)。您的代码的问题在于,它分别计算每列。需要逐行all
将所有列的结果合并为每行一个结果:
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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句