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
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。零表示两个节点未连接。在在这段代码中,我假设您的
nodeList
是nodeList = [[x1,y1,...],[x2,y2,...],...[xN,yN,...]]
形式的笛卡尔坐标列表。我还假设你有一个叫做calcDistance
的函数,它返回两个笛卡尔坐标之间的欧几里德距离。这已经足够基本了,我还没有为此编写代码,而且在任何情况下,使用函数都允许将来的泛化和可修改性。在graph-tool库有{a2}。所以你可以这样做,假设你有}:
numpy
和{愚蠢的
e*(1+1e-9)
是因为你的标准是“distance<;=e”,而geometric_graph
的标准是“distance<;e”。在有一个名为
delta
的参数没有提到,因为我认为您对参数n
的描述是对两个参数(点之间的间距和点数)起作用。在相关问题 更多 >
编程相关推荐