【发布时间】:2021-01-06 10:57:05
【问题描述】:
我有一个使用 Networkx 的网络图,其中每个节点都有一个 id:1 到 N。每个节点还有一个标签,它是一个字符串(为简单起见,字母)。我希望能够搜索这些标签的特定列表并找到与路径对应的节点 ID。例如,我想从下面的网络中找到路径 ['l', 'a', 'o'] 并返回节点 id,正确答案是 [1, 4, 5]:
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
def set_node_labels(G, arr):
values = arr.flatten()
labels = {}
for node in G.nodes():
labels[node] = values[node]
nx.set_node_attributes(G, labels, "label")
return labels
test_array = np.array([['f', 'l', 'p'],
['r', 'a', 'o'],
['b', 't', 'd']])
W,H = test_array.shape
index_array = np.arange(0, len(test_array.ravel()), 1, dtype=np.uint8).reshape((W,H))
print(index_array)
node_connections = []
for j in range(H-1):
for i in range(W-1):
n1 = (index_array[j, i], index_array[j, i+1])
n2 = (index_array[j, i], index_array[(j+1), i])
n3 = (index_array[j, i], index_array[(j+1), i+1])
node_connections.extend([n1, n2, n3])
n4 = (index_array[j, W-1], index_array[(j + 1), W-1])
node_connections.extend([n4])
print(node_connections)
# create graph
G = nx.MultiGraph()
G.add_edges_from(node_connections)
labels = set_node_labels(G, test_array)
这有两个麻烦:1)如何搜索特定路径,而不仅仅是源和目标;如何使用标签搜索并返回 id? 非常感谢任何帮助。
【问题讨论】:
标签: python networking networkx