算子理论的一个分支研究移位算子S.基本上,给定一个图形,其中权重分配给图形的每个顶点,移位运算符通过采用相同的图形(A)并替换每个图形的权重来生成新的图形。具有顶点邻居权重之和的顶点。例如,图(A)中的3被5 + 5 + 2 + 0代替。
A
乙
有谁知道networkx是否可以帮助我自动化任意图形的过程,G?另外,我可能构建的图形的大小(顶点,边缘等)有哪些限制?
答案 0 :(得分:0)
首先,您需要创建图表并添加节点权重。
我使用a
到h
的字母命名节点。
对于较大的图形,您需要一种不同的命名节点方式(因此每个节点都有一个唯一的名称)。
在下面的代码中,我还绘制了节点名称。 请注意,我手动设置节点位置,所以我有与您相同的示例。 对于较大的图表,请查看graph layouts。
import networkx as nx
from matplotlib import pyplot as plt
G = nx.Graph()
nodes = [
['a', {'weight' : 5}],
['b', {'weight' : 4}],
['c', {'weight' : 2}],
['d', {'weight' : 3}],
['e', {'weight' : 5}],
['f', {'weight' : 0}],
['g', {'weight' : 0}],
['h', {'weight' : 1}]
]
for node in nodes:
G.add_node(node[0], node[1]) # add node and node weight from list
G.add_edges_from([
('a', 'd'),
('b', 'e'),
('c', 'd'),
('d', 'e'),
('d', 'g'),
('e', 'h'),
('e', 'f')
])
pos = {'a' : (1, 2), 'b' : (2, 2), 'c' : (0, 1), 'd' : (1, 1), 'e' : (2, 1), 'f' : (3, 1), 'g' : (1, 0), 'h' : (2, 0)} # manual fixed positions
plt.figure()
nx.draw(G, pos=pos, with_labels=True, node_size=700, node_color='w') # draw node names
plt.show()
输出:
以下是绘制节点权重的代码:
plt.figure()
nx.draw(G, pos=pos, labels=nx.get_node_attributes(G, 'weight'), node_size=700, node_color='w') # draw node weights
plt.show()
最后是用于计算移位运算符S的代码。
您可以使用node
获取某个节点G[node]
的邻居。
可以使用weight
访问某个节点neighbor
的{{1}}属性。
使用该列表和列表推导我将当前节点的所有邻居节点的权重列表相加。请注意,新权重设置为G.node[neighbor]['weight']
。
nx.set_node_attributes(G, 'weight', new_weights)
最终图表: