X = [[1,2], [5,1], [1,2], [2,-1] , [5,1]]
我想计算重复元素的“频率”,例如[1,2]
答案 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.unique
:http://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}