通过lin分离簇

2024-09-27 04:14:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由几个集群组成的数据集。我想用一条线来分隔这些簇,就像Voronoi图一样,但不是从一个点创建的。我现在的想法是确定每个点之间的最短距离,并找到位于簇外部的点。平均距离需要采取,以确定线分隔集群。你知道吗

最近点可通过cdist确定。我想在每个簇上循环,并将簇中的每个点与其他簇中的其他点进行比较。然而,我一直在做这件事。下面您可以找到我用Python编写的代码。你知道吗

import matplotlib.pyplot as plt
from scipy.spatial.distance import cdist

def closest_point(pt, others):
    distances = cdist(pt, others)
    return others[distances.argmin()]

ppx = [[615, 618, 621], [629, 623, 620, 625], [614, 622, 610, 612]]
ppy = [[524, 530, 527], [559, 556, 548, 548], [559, 574, 572, 542]]

for i in range(0,3): # range(len(grouped))
    for j in range(len(ppx[i])):
        a = [[ppx[i][j], ppy[i][j]]]
        others = ..??..
        print("closest:", closest_point(a, others))

    plt.scatter(ppx[i],ppy[i])
plt.show()

如你所见,我可以找到簇中的一个点(a),但是,当我想把另外两个簇放到其他簇中时,我就卡住了。有人知道如何解决这个问题吗?还是我想错了方向?你知道吗

我添加了一张有三个簇的图片和我打算制作的分隔线。你知道吗


Tags: inimportptforlen集群rangeplt

热门问题