【发布时间】:2021-04-12 11:54:27
【问题描述】:
sklearn 的聚类输出生成标签列表(ith 元素将用它所在的集群进行标记。现在,假设我想要一个集群列表。有一个相当明显的方法那:
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 为中心的方法?
【问题讨论】:
-
您的结果是不规则形状,numpy 数组不能很好地处理它们。这通常强烈暗示基于循环的方法可能是唯一的方法。
-
@swag2198 这当然不是唯一的方法。这也有效:
return [labs[labs == i] for i in range(howmany]。这对于小型数据集来说更快,但是是二次时间,所以最终会陷入困境。
标签: python numpy cluster-computing