根据我可以为scipy graph_search找到的示例,输入图似乎采用NxN的形式,其中图的索引对等于该值。
所以是矩阵
G = [ [0,5,2],
[3,0,8],
[12,7,0] ]
表示2->1
的边权重是索引G[1,0] = 3
的值
如果这是错误的,请解释。
我遇到的问题是如何以这种方式有效地输入节点连接,从字典开始,其中的键是节点,值是连接的节点的数组。
{'node1' : [node2,weight1],[node3,weight2]}
在边缘node1->node2 = weight1
我可以遍历键的循环并创建[ [node1,node2,,weight1],[node1,node3,weight2] ]
的新数组,但这也不能使我更接近scipy格式。有没有简便的方法可以从字典或我可以进行的迭代数组中进行此转换?
答案 0 :(得分:1)
假设您已经知道图形中的节点数N并且图形是有向的,则可以这样操作:
def create_csgraph_matrix(d, N):
M = np.zeros((N,N))
for i in d:
for l in d[i]:
j = l[0]
weight = l[1]
M[i, j] = weight
return M
其中d
是您的形式的字典。示例:
In [38]: d = {0: [[1, 10], [2, 20]], 2: [[1, 15]]}
In [39]: create_csgraph_matrix(d,3)
Out[39]:
array([[ 0., 10., 20.],
[ 0., 0., 0.],
[ 0., 15., 0.]])
请注意,此图中的节点为0,1,2。