python中的邻近图

2024-04-20 14:50:01 发布

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

我对Python编码比较陌生(我主要是因为运行速度而从R转换过来的),我正试图弄清楚如何编写接近图。在

也就是说,假设我在d维欧几里德空间中有一组均匀分布的点,这些就是我的节点。我想把这两个点连接成一个无向图当且仅当它们在e内相距。如何使用参数对其进行功能编码:

  • n: 同一轴线上两点之间的间距
  • d: R^d尺寸
  • e: 允许边存在的最大距离。在

Tags: 功能距离编码参数节点尺寸空间速度
2条回答

这段代码应该可以工作,尽管它肯定不是最有效的。它将遍历每个节点并检查它与所有其他节点的距离(这些节点尚未与之进行比较)。如果这个距离小于您的值e,则连通矩阵中的相应值被设置为1。零表示两个节点未连接。在

在这段代码中,我假设您的nodeListnodeList = [[x1,y1,...],[x2,y2,...],...[xN,yN,...]]形式的笛卡尔坐标列表。我还假设你有一个叫做calcDistance的函数,它返回两个笛卡尔坐标之间的欧几里德距离。这已经足够基本了,我还没有为此编写代码,而且在任何情况下,使用函数都允许将来的泛化和可修改性。在

numNodes = len(nodeList)
connected = np.zeros([numNodes,numNodes])
for i, n1 in enumerate(nodeList):
    for j, n2 in enumerate(nodeList[i:]):
        dist = calcDistance(n1, n2)
        if dist < e:
            connected[i,j] = 1
            connected[j,i] = 1

graph-tool库有{a2}。所以你可以这样做,假设你有numpy和{}:

coords = numpy.meshgrid(*(numpy.linspace(0, (n-1)*delta, n) for i in range(d)))
# coords is a Python list of numpy arrays
coords = [c.flatten() for c in coords]
# now coords is a Python list of 1-d numpy arrays
coords = numpy.array(coords).transpose()
# now coords is a numpy array, one row per point
g = graph_tool.generation.geometric_graph(coords, e*(1+1e-9))

愚蠢的e*(1+1e-9)是因为你的标准是“distance<;=e”,而geometric_graph的标准是“distance<;e”。在

有一个名为delta的参数没有提到,因为我认为您对参数n的描述是对两个参数(点之间的间距和点数)起作用。在

相关问题 更多 >