如何在numpy中计算重复数组?

时间:2015-12-12 14:27:22

标签: python

X = [[1,2], [5,1], [1,2], [2,-1] , [5,1]]

我想计算重复元素的“频率”,例如[1,2]

3 个答案:

答案 0 :(得分:2)

除非速度确实是个问题,否则最简单的方法是将子数组映射到元组并使用Counter dict:

X = [[1,2], [5,1], [1,2], [2,-1] , [5,1]]

from collections import Counter

cn = Counter(map(tuple, X))
print(cn)
print(list(filter(lambda x:x[1] > 1,cn.items())))
Counter({(1, 2): 2, (5, 1): 2, (2, -1): 1})
((1, 2), 2), ((5, 1), 2)]

如果您认为[1, 2]等于[2, 1],那么您可以使用冻结集Counter(map(frozenset, X)

答案 1 :(得分:0)

查看numpy.uniquehttp://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.unique.html

您可以使用return_counts参数来获取每个项目的计数:

values, counts = numpy.unique(X, return_counts = True)
repeated = values[counts > 1]

答案 2 :(得分:-1)

假设我明白你想要的东西:

尝试将列表中的每个item计入字典dict,然后从dict项中选择count > 1

以下代码可能会对您有所帮助:

freq = dict()

for item in x:
    if tuple(item) not in x:
        freq[tuple(item)] = 1
    else:
        freq[tuple(item)] += 1

print {k:v for(k,v) in freq.items() if v > 1}

该代码将为您提供输出:

{(1, 2): 2}