python - 如何生成未填充空间的骨架点?

标签 python algorithm python-3.x scikit-learn

给定一个点坐标数组,我想生成 n 个最能“定义”未填充空间的新坐标。

我的方法的第一部分涉及使用 K-Means 聚类来生成合理代表所有点的 k 点。然后我想用这些点来为未填充的空间生成骨架点。

示例如下所示。初始点显示为小点,K-Means 聚类中心显示为大点 (k = 5),我对骨骼点应放置位置的人工估计显示为黄色方 block ,其中 n = 4

estimated skeletal points

为未填充空间生成这些骨架点的最佳方法是什么? (看起来我几乎需要一个“逆向聚类”算法。)随意提供一个不使用所示 K-Means 聚类的解决方案;那只是我简化问题的尝试。

# Dataset used:
X = np.array([
    [0.0, 0.0], [0.1, 0.0], [0.2, 0.0], [0.2, 0.1], [0.3, 0.1], [0.4, 0.1],
    [0.4, 0.2], [0.5, 0.2], [0.5, 0.3], [0.6, 0.3], [0.7, 0.3], [0.8, 0.3],
    [0.9, 0.3], [0.9, 0.4], [0.9, 0.5], [0.9, 0.5], [0.9, 0.6], [0.9, 0.7],
    [0.9, 0.7], [0.9, 0.8], [0.8, 0.8], [0.8, 0.9], [0.7, 0.9], [0.6, 0.9],
    [0.5, 0.9], [0.4, 0.9], [0.4, 0.8], [0.3, 0.8], [0.3, 0.7], [0.2, 0.7],
    [0.2, 0.6], [0.2, 0.5], [0.2, 0.4]
])

最佳答案

这是翻译您所要求的内容的一种尝试:

1) 用规则间隔点的网格填充相关区域。

2) 从这个规则网格中删除靠近初始点的点。

3)使用k-means聚类对剩余的网格点进行聚类。

如果您有 P 个初始点并打算创建 k 个簇,我将删除大约 P * 100/(P + k) % 的网格点。应该有一些巧妙的方法来获得使用非常精细的网格的准确性,而无需实际一一处理所有网格点,例如通过递归地将空间分成 block ,但一个简单的网格可以让您快速测试这个想法并看看它是什么样子。

关于python - 如何生成未填充空间的骨架点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106938/

相关文章:

python - 在 Python 子进程模块中过滤掉需要终端的命令

algorithm - SPOJ 问题 Flibonakki time limit exceed

python - 为什么 True 和 False 在 Python 2 中仍然可以修改?

python - python的multiprocessing Queue默认是 "infinite"吗?

python - 如何生成最多 10 次迭代的随机线图?

python - 向 DataFrame 添加多行的有效方法

java - Android套接字客户端不工作

c++ - 实现离轴投影

c# - 从月份数组中获取一系列值

python - 如何保存使用子进程循环 python 脚本的脚本的输出?