使用python分离DBSCAN中每个集群的坐标(3D坐标)

Posted

技术标签:

【中文标题】使用python分离DBSCAN中每个集群的坐标(3D坐标)【英文标题】:Separating the coordinates(3D coordinates) for each cluster in DBSCAN using python 【发布时间】:2019-10-01 17:28:54 【问题描述】:

我正在使用 DBSCAN(使用 python)对一些 3D 坐标进行聚类。我能够将它聚集到不同的集群中。但现在我想分离属于这些集群中的每一个的坐标,并将这些坐标打印到不同的文本文件中。任何人都可以帮我怎么做。

我已经尝试将集群分成单独的集群并获取每个集群的坐标。完全不同的代码也可以

由于某些问题,我无法发布我的代码。但我会发布我用来制作我的命令。 (这个是二维的)

from sklearn.cluster import DBSCAN
import numpy as np
data = np.random.rand(500,3)

db = DBSCAN(eps=0.12, min_samples=1).fit(data)
labels = db.labels_
from collections import Counter
Counter(labels)

【问题讨论】:

请提供您想要达到的结果的示例。 如果集群如下所示 .Counter(0: 34, 1: , 2: 25, 3: 10, -1: 3) 我想获取每个点的坐标在每个簇中。例如:- 对于第一个簇(对于“0”簇),我想在一个单独的文本文件中打印属于第一个簇的 34 个点的坐标,如下所示。-32.143 12.990 -13.488/ -41.02 4.62 -15.68-34.21 13.61 -13.09/33.11 15.87 13.73/-26.49 0.16 -23.98/37.06 2.04 -15.55/-40.18 3.20 -15.02/39.40 3.04 15.67/38.75 2.7个点的坐标属于1个聚类在文本文件中。你能帮我吗? - 32.760 14.072 -13.749 -37100 1.953 -15.720 -32.143 12.990 -13.488 -15.651 -34.219 13.611 -13.090 -33.117 15.875 -13.738 -26.494 -13.738 -26.494 0.165 -23.985 -37.069 2.042 -15.559 -4922 -15.559 -4012 -15.559 -4012 -15.559 -2012 -15.559 -20.18 3.209 -15.021 -39.407 3.043 -15.675 -38.752 2.719 -15.411 像这样,我想在单独的文本文件中打印属于每个集群的点的坐标。 @sentence 也请阅读上面的评论。空间不足以很好地展示 Corordiantes。我希望在每个集群的单独文本文件中都这样。希望你得到我 @sentence 请告诉我。如果你没有收到我的问题 让我们看看我是否明白。您有一组点,对它们进行聚类,并希望根据它们的聚类分配将它们存储到文件中。那正确吗?如果是,您想使用哪种文件? csv、txt、pkl? 【参考方案1】:

要将样本 (numpy.array) 存储在 .txt 文件中,您应该首先根据集群分配将样本划分为分区,然后保存生成的分区。

from collections import defaultdict

clusters = defaultdict(list)

for i,c in enumerate(db.labels_):
    clusters[c].append(data[i])

for k,v in clusters.items():
    np.savetxt('cluster.txt'.format(k), v, delimiter=",", fmt='%s')

您会得到 68 个 txt 文件,每个文件都包含数据集中一个或多个样本的坐标。

【讨论】:

这正是我想要的。但我想在 3 个坐标之前打印一些东西。我可以这样做吗?我想要,它像蛋白质中的 PDB 文件一样打印成“ATOM 1 O HOH X 1 -37.100 1.953 -15.720 1.00 43.38 O”。如果每行可以增加2位数字,那就太好了。非常感谢。 我发布了一个新问题,标题为“使用 python 分离 DBSCAN 中每个集群的坐标”。你能检查一下吗?谢谢

以上是关于使用python分离DBSCAN中每个集群的坐标(3D坐标)的主要内容,如果未能解决你的问题,请参考以下文章

选择和实施聚类方法:DBSCAN 其他?

在 scikit DBSCAN 中查找每个集群内的元素?

DBSCAN 集群甚至无法处理 40k 数据,但使用 python 和 sklearn 处理 10k 数据

如何在 DBSCAN sklearn 中获取质心?

Python DBSCAN - 如何根据向量的平均值绘制集群?

在给定 x,y,z 坐标时使用 DBSCAN 算法对 3D 点进行聚类