使用NetworkX研究移位运算符和其他数学创作

时间:2017-06-21 20:36:49

标签: graph networkx

算子理论的一个分支研究移位算子S.基本上,给定一个图形,其中权重分配给图形的每个顶点,移位运算符通过采用相同的图形(A)并替换每个图形的权重来生成新的图形。具有顶点邻居权重之和的顶点。例如,图(A)中的3被5 + 5 + 2 + 0代替。

enter image description here

A

enter image description here

有谁知道networkx是否可以帮助我自动化任意图形的过程,G?另外,我可能构建的图形的大小(顶点,边缘等)有哪些限制?

1 个答案:

答案 0 :(得分:0)

首先,您需要创建图表并添加节点权重。 我使用ah的字母命名节点。 对于较大的图形,您需要一种不同的命名节点方式(因此每个节点都有一个唯一的名称)。

在下面的代码中,我还绘制了节点名称。 请注意,我手动设置节点位置,所以我有与您相同的示例。 对于较大的图表,请查看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()

输出:

enter image description here

以下是绘制节点权重的代码:

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()

enter image description here

最后是用于计算移位运算符S的代码。 您可以使用node获取某个节点G[node]的邻居。 可以使用weight访问某个节点neighbor的{​​{1}}属性。

使用该列表和列表推导我将当前节点的所有邻居节点的权重列表相加。请注意,新权重设置为G.node[neighbor]['weight']

nx.set_node_attributes(G, 'weight', new_weights)

最终图表:

enter image description here