Python 基于最大值对列表值进行分组
如果我有一个数组(X),我正在研究k-均值算法来聚类数字列表 然后我运行以下代码Python 基于最大值对列表值进行分组,python,scikit-learn,cluster-analysis,k-means,Python,Scikit Learn,Cluster Analysis,K Means,如果我有一个数组(X),我正在研究k-均值算法来聚类数字列表 然后我运行以下代码 from sklearn.cluster import AgglomerativeClustering cluster = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') cluster.fit_predict(X) for i in range(len(X)): print("%4d &q
from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
cluster.fit_predict(X)
for i in range(len(X)):
print("%4d " % cluster.labels_[i], end=""); print(X[i])
我得到了结果
1 1 [0.85142858]
2 3 [0.85566274]
3 3 [0.85364912]
4 0 [0.81536489]
5 1 [0.84929932]
6 1 [0.85042336]
7 1 [0.84899714]
8 0 [0.82019115]
9 4 [0.86112067]
10 2 [0.8312496]
如何获得每个集群中值为(i)的最大数量?像这样
0: 0.82019115 8
1: 0.85142858 1
2: 0.8312496 10
3: 0.85566274 2
4: 0.86112067 9
首先使用
zip
将它们成对分组,然后按值(成对的第二个元素)按递增顺序排序,并从中创建一个dict
尝试:
最大数量:
{0: array([0.82019115]),
2: array([0.8312496]),
1: array([0.85142858]),
3: array([0.85566274]),
4: array([0.86112067])}
0 1
8 0 0.820191
1 1 0.851429
10 2 0.831250
2 3 0.855663
9 4 0.861121
编辑:
{0: array([0.82019115]),
2: array([0.8312496]),
1: array([0.85142858]),
3: array([0.85566274]),
4: array([0.86112067])}
0 1
8 0 0.820191
1 1 0.851429
10 2 0.831250
2 3 0.855663
9 4 0.861121
你想要这个吗
elem = list(zip(res, range(1,len(X)+1)))
e = sorted(elem, key=lambda x: x[0][1], reverse=False)
final_dict = {k[0]:(k[1], v) for (k,v) in e}
for key in sorted(final_dict):
print(f"{key}: {final_dict[key][0][0]} {final_dict[key][1]}")
或
df:
{0: array([0.82019115]),
2: array([0.8312496]),
1: array([0.85142858]),
3: array([0.85566274]),
4: array([0.86112067])}
0 1
8 0 0.820191
1 1 0.851429
10 2 0.831250
2 3 0.855663
9 4 0.861121
Pygirl谢谢,但我需要在同一行中打印(i)Pygirl非常感谢您的帮助,但为什么(i)的值增加1,例如对于集群0,它返回0:[0.82019115]8,而该值应返回0:[0.82019115]7?顺序是0,2,1,3,4???为什么不是0,1,2,3,4?提前感谢,因为您希望索引从1开始,而不是从零开始。这就是为什么。检查我编辑的答案。我已按键对它们重新排序。如果希望索引仅从零开始。然后删除增量1,并在范围内从0开始。
例如,对于集群0,它返回0:[0.82019115]8,该值应返回0:[0.82019115]7
你自己在问题中提到,你的索引看起来像是从1开始,而不是从零开始,然后递增1。你能结束这个问题吗?