numpy数组中的计数列表函数的等价物

时间:2015-07-22 10:43:33

标签: python arrays numpy

我有一个形状(100000,2)的矩阵listScore:我想计算所有相同的行。例如,如果listScore是列表,我会这么做:

listScore.count([2,0])

查找等于[2,0]的所有列表。 我显然可以转换listScore的类型,这样它就是一个列表,但我希望保持numpy的有效性。有什么功能可以用来做同样的事情吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

如果listScore是NumPy数组,则可以 -

count = np.all(listScore == np.array([2,0]),axis=1).sum()

如果数组总是一个2列数组,那么您可以分别将这两列与20进行比较以获得性能并获得计数 -

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()

匹配特定模式