说我有[123,127,99,75,86,83,81],我想要回复{'12X':2,'8X':3,'99':1,'75 “:1}
有什么想法吗?
答案 0 :(得分:2)
根据具体情况,您尝试做的事情可能是:
将您的元素分组到相同大小或预定义的离散箱/桶中。使用像Pandas这样的库很容易做到:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html
>>> pandas.cut([123, 127, 99, 75, 86, 83, 81], 4, labels=False)
array([3, 3, 1, 0, 0, 0, 0])
(其中" 123和127在第3组中,99在第1组中,第75组,第86组,第83组,第81组在第0组和第34组中)。
当你不知道价值观时,你将你的元素分组,但知道它们形成了群体。
喜欢" 1,2,3,11,12,13和#34;显然是两个集群" 1,2,3和#34;和" 11,12,13和#34;。
一种简单易用的群集数据方法是K-means但是还有其他算法,你应该看看scipy。
>>> import sklearn.cluster
>>> import numpy as np
>>>
>>> kmeans = sklearn.cluster.KMeans(n_clusters=4)
>>> kmeans.fit_predict(numpy.array([123, 127, 99, 75, 86, 83, 81]).reshape(-1, 1))
array([0, 0, 2, 3, 1, 1, 1], dtype=int32)
这个一起给123和127,单独99,单独75,81 83 86。
这是一个简单的" GROUP BY" ala SQL,当你可以提供一个函数来返回你的值应该是的组:
像:
>>> from itertools import groupby
>>> for key, group in groupby([123, 127, 99, 75, 86, 83, 81], lambda x: int(x / 10)):
... print(key, list(group))
...
12 [123, 127]
9 [99]
7 [75]
8 [86, 83, 81]