research-图机器学习NetworkX包工具使用


图机器学习NetworkX包工具使用

1 安装

pip install networkx

2 创建图

import networkx as nx

G=nx.Graph() #无向图
#G=nx.DiGraph() #有向图
#G=nx.MultiGraph() #多边无向图
#G=nx.MultiDiGraph() #多边有向图

3 点node

可以每次添加一个节点:

G.add_node(1)

或者从可迭代容器(iterable)(如列表)中添加多个节点

G.add_nodes_from([2, 3])

也可以同时添加包含节点属性的节点,如果容器以(node, node_attribute_dict)2元组的形式

G.add_nodes_from([
    (4, {"color": "red"}),
    (5, {"color": "green"}),
])

一个图中的节点可以合并到另一个图

H = nx.path_graph(10)
G.add_nodes_from(H)

现在图G中节点包括原H中的节点。相反,也可以将整个图H作为图G中的一个节点

G.add_node(H)

4 边edge

图也可以以添加一条边的形式增长

G.add_edge(1, 2)
e = (2, 3)
G.add_edge(*e)  # unpack edge tuple*

通过接入边的列表增长

G.add_edges_from([(1, 2), (1, 3)])

或者通过添加任何边的ebunch。

ebunch是边的元组的任何可迭代容器。边的元组可以是 2 元组节点,也可以是 3 元组:在 2 个节点后跟边的属性字典,如 (2, 3,{'weight':3.1415})

G.add_edges_from(H.edges)

添加现有节点或边时没有冲突。 例如,在删除所有节点和边之后,

G.clear()

添加新的节点/边时,NetworkX 悄悄地忽略任何已经存在的。

G.add_edges_from([(1, 2), (1, 3)])
G.add_node(1)
G.add_edge(1, 2)
G.add_node("spam")        # adds node "spam"
G.add_nodes_from("spam")  # adds 4 nodes: 's', 'p', 'a', 'm'
G.add_edge(3, 'm')

此时,图G 包含 8 个节点和 3 条边

>>> G.number_of_nodes()
8
>>> G.number_of_edges()
3

5 检查图的元素

四个基本图形属性:G.nodesG.edgesG.adjG.degree

>>> list(G.nodes)
[1, 2, 3, 'spam', 's', 'p', 'a', 'm']
>>> list(G.edges)
[(1, 2), (1, 3), (3, 'm')]
>>> list(G.adj[1])  # or list(G.neighbors(1))
[2, 3]
>>> G.degree[1]  # the number of edges incident to 1
2

6 从图中删除元素

>>> G.remove_node(2)
>>> G.remove_nodes_from("spam")
>>> list(G.nodes)
[1, 3, 'spam']
>>> G.remove_edge(1, 3)

绘制图

首先导入 Matplotlib 的绘图接口(pylab 也可以)

import matplotlib.pyplot as plt

要测试 nx_pylab 是否成功导入,请使用以下方法之一绘制图G

G = nx.petersen_graph()
subax1 = plt.subplot(121)
nx.draw(G, with_labels=True, font_weight='bold')
subax2 = plt.subplot(122)
nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='bold')

交互式操作时上述图像会自动展示。 注意如果没有在交互模式下使用 matplotlib,可能需要下面命令展示图形

plt.show()  

options = {
    'node_color': 'black',
    'node_size': 100,
    'width': 3,
}
subax1 = plt.subplot(221)
nx.draw_random(G, **options)
subax2 = plt.subplot(222)
nx.draw_circular(G, **options)
subax3 = plt.subplot(223)
nx.draw_spectral(G, **options)
subax4 = plt.subplot(224)
nx.draw_shell(G, nlist=[range(5,10), range(5)], **options)

文章作者: zxn
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zxn !
  目录