从"sklearn"集群标签输出生成集群列表



sklearn的集群输出生成标签列表(其中i第二个元素将用它所在的集群进行标记。现在,假设我想要一个集群列表。有一种相当明显的方法:

def clustarrays(labs):
howmany = np.max(labs)+1
results = [[] for i in range(howmany)]
for i in range(len(labs)):
cnum = labs[i]
results[cnum].append(i)
return results

ll = [1, 2, 3, 0, 0, 5, 5, 5]
clustarrays(ll)
[[3, 4], [0], [1], [2], [], [5, 6, 7]]

这一切都很好,但对于大型数据集来说,这将非常缓慢。有没有一种更以愚蠢为中心的方式来做到这一点?

如果您想要纯numpy,请使用:

def clustarrays(labs):
return np.split(np.argsort(labs),np.unique(labs,return_counts=True)[1].cumsum())

输出:

[array([3, 4]), array([0]), array([1]), array([2]), array([5, 6, 7]), array([], dtype=int64)]

我建议熊猫:

import pandas as pd
def clustarrays(labs):
df = pd.DataFrame({'labs':labs})
return df.groupby(df.labs).groups

输出:

{0: Int64Index([3, 4], dtype='int64'), 1: Int64Index([0], dtype='int64'), 2: Int64Index([1], dtype='int64'), 3: Int64Index([2], dtype='int64'), 5: Int64Index([5, 6, 7], dtype='int64')}

最新更新