networkx 通过欧几里得距离阈值构造图

Posted

技术标签:

【中文标题】networkx 通过欧几里得距离阈值构造图【英文标题】:networkx construct graph by euclidean distance threshold 【发布时间】:2021-03-19 16:41:03 【问题描述】:

我想在给定节点时通过欧几里得阈值边构造几何图。

例如,

给定的节点是二维地图上的位置

x1(1,0) x2(3,4) x5(5,6)

那么当我设置欧式距离阈值比如5时, 图表看起来像 x1-x2-x5。由于x1和x5都比5远,所以不允许连接。

如何使用 networkx 或其他库方便地做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用 kd-tree,特别是您可能希望使用 scipy.spatial.cKDTree(kd-tree 用于快速最近邻查找)。

一般来说,kd-tree(k-dimensional tree的缩写)是一种空间划分数据结构,用于组织k维空间中的点。它们对于在空间中找到最接近给定输入点的点很有用。

from networkx import Graph
from scipy.spatial import cKDTree

# your data and parameters
points = [(1, 0), (3, 4), (5, 6)]
dist = 5

# build KDTree
tree = cKDTree(points)

# build graph
G = Graph()
G.add_nodes_from(points)
G.add_edges_from((point, points[idx2])
                 for idx1, point in enumerate(points)
                 for idx2 in tree.query_ball_point(point, dist)
                 if idx1 != idx2)

【讨论】:

以上是关于networkx 通过欧几里得距离阈值构造图的主要内容,如果未能解决你的问题,请参考以下文章

使用构造函数计算两点之间的欧几里得距离

列表内列表之间的欧几里得距离

欧几里得距离

通过欧几里得距离(或任何其他距离计算技术)基于提取的 SIFT 描述符估计两幅图像的相似度得分

密度聚类OPTICS算法

什么是“欧几里德范数”(Euclidean norm)?