J'essaye de prendre l'entropie de mes données de résultat k-means et je reçois l'erreur: TypeError: l'objet 'numpy.int32' n'est pas itérable I ne comprends pas pourquoi.Python TypeError: l'objet 'numpy.int32' n'est pas itérable
from collections import Counter
def calcEntropy(x):
p, lens = Counter(x), np.float(len(x))
return -np.sum(count/lens*np.log2(count/lens) for count in p.values())
k_means_sp['entropy']=[calcEntropy(x) for x in k_means_sp['cluster']]
puis je reçois le message d'erreur:
<ipython-input-26-d375ecf00330> in <module>()
----> 1 k_means_sp['entropy']=[calcEntropy(x) for x in k_means_sp['cluster']]
<ipython-input-26-d375ecf00330> in <listcomp>(.0)
----> 1 k_means_sp['entropy']=[calcEntropy(x) for x in k_means_sp['cluster']]
<ipython-input-23-f5508ea8782c> in calcEntropy(x)
1 from collections import Counter
2 def calcEntropy(x):
----> 3 p, lens = Counter(x), np.float(len(x))
4 return -np.sum(count/lens*np.log2(count/lens) for count in p.values())
/Users/mpiercy/anaconda/lib/python3.6/collections/__init__.py in __init__(*args, **kwds)
535 raise TypeError('expected at most 1 arguments, got %d' % len(args))
536 super(Counter, self).__init__()
--> 537 self.update(*args, **kwds)
538
539 def __missing__(self, key):
/Users/mpiercy/anaconda/lib/python3.6/collections/__init__.py in update(*args, **kwds)
622 super(Counter, self).update(iterable) # fast path when counter is empty
623 else:
--> 624 _count_elements(self, iterable)
625 if kwds:
626 self.update(kwds)
TypeError: 'numpy.int32' object is not iterable
k_means_sp.head()
credit debit cluster
0 9.207673 8.198884 1
1 4.248495 8.202181 0
2 8.149668 7.735145 2
3 5.138677 7.859741 0
4 8.058163 7.918614 2
en supposant que 'k_means_sp' contient 'numpy.int32', alors vous passez un' numpy.int32' à 'Counter'. 'Counter' devrait prendre un' iterable'. –
qu'est-ce que cela signifie que je devrais faire la colonne de cluster soit cluster = [0,1,2] et y = iter (cluster) ou est-ce que je fais cela complètement faux? Merci! – bananablue1
@ bananablue1 Cela signifie que vous ne pouvez pas passer un nombre entier à 'calcEntropy' tel qu'il est actuellement écrit. La bonne chose à faire dépend de votre objectif. Si vous voulez que 'calcEntropy' fonctionne avec des entiers (cela a-t-il un sens?) Alors vous devez le réparer, si vous voulez passer quelque chose d'autre à' calcEntropy', puis passer autre chose, etc. – Goyo