我有一个形状(100000,2)的矩阵listScore
:我想计算所有相同的行。例如,如果listScore
是列表,我会这么做:
listScore.count([2,0])
查找等于[2,0]的所有列表。
我显然可以转换listScore
的类型,这样它就是一个列表,但我希望保持numpy
的有效性。有什么功能可以用来做同样的事情吗?
提前致谢
答案 0 :(得分:4)
如果listScore
是NumPy数组,则可以 -
count = np.all(listScore == np.array([2,0]),axis=1).sum()
如果数组总是一个2列数组,那么您可以分别将这两列与2
和0
进行比较以获得性能并获得计数 -
count = ((listScore[:,0] ==2) & (listScore[:,1] ==0)).sum()
如果你是np.einsum
的粉丝,你可能想试试这个 twisted -
count = (~np.einsum('ij->i',listScore != [2,0])).sum()
另一个面向绩效的解决方案可以是cdist from scipy
-
from scipy.spatial.distance import cdist
count = (cdist(listScore,np.atleast_2d([2,0]))==0).sum()
答案 1 :(得分:0)
对于numpy.matrix
,您可以使用:
(listScore==listScore[ind]).all(1).sum()
查找与索引为ind
的行匹配的行数。
或
(listScore==[2,0]).all(1).sum()
匹配特定模式