-1

我有一个浮动列表,我想知道其中有多少重复项。

我试过这个:

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'

我已经查看了类似的问题,但我无法理解 hashable 的含义,为什么列表(或 numpy 数组)不可哈希以及我应该使用哪种类型。

4

3 回答 3

2

Your numpy-array is two-dimensional. So list(p) does not do, what you expect. Use list(p.flat) instead.

Or (mis)use numpy's histogram function:

cnt, bins = numpy.histogram(p, bins=sorted(set(p.flat))+[float('inf')])
dup = bins[cnt>1]
于 2014-11-15T10:45:37.093 回答
-1

you want to count something in a list ? why not use the count method of list object ?

number = my_list.count(my_float)
于 2014-11-15T10:45:45.197 回答
-1

这取决于您所说的重复数量是什么意思。

一个简单的方法是使用哈希:

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 非常容易。

于 2014-11-15T10:43:13.063 回答