我有一个浮动列表,我想知道其中有多少重复项。
我试过这个:
p = t_gw.p(sma, m1, m2) #p is a 1d numpy array
p_list = list(p)
dup = set([x for x in p_list if p_list.count(x) > 1])
print dup
我也试过使用collections.counter,但我总是得到同样的错误
TypeError: unhashable type: 'numpy.ndarray'
我在类似的问题中四处查看,但我无法理解可用的方法,为什么列表(或numpy数组)不可清除以及我应该使用哪种类型。
答案 0 :(得分:2)
你的numpy-array是二维的。所以list(p)
没有做到,你所期望的。请改用list(p.flat)
。
或(误)使用numpy的直方图函数:
cnt, bins = numpy.histogram(p, bins=sorted(set(p.flat))+[float('inf')])
dup = bins[cnt>1]
答案 1 :(得分:-1)
这取决于重复数量的含义。
一种简单的方法是使用hash:
h = {}
arr = [6, 3, 1, 1, 6, 2, 1]
for i in arr:
if i in h:
h[i] += 1
else:
h[i] =1
print h
现在,如果您的意思是重复项是在列表中使用多次的值,则可以执行以下操作:
num = 0
for i in h:
if h[i] > 1:
num += 1
print num
我认为将其修改为numpy非常容易。
答案 2 :(得分:-1)
number = my_list.count(my_float)