networkx专栏【python】——入门与教程

本文介绍了使用Python的NetworkX库创建和操作图的基本步骤,包括添加和移除节点与边,设置属性,以及有向图的概念。此外,还讨论了图像分析和绘制,包括随机图生成、图的读写和可视化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:本篇内容参考NetworkX官网教程

创建一个图像

创建一个不含nodes(节点)和edges(边)的空白图像。

import networkx as nx
G = nx.Graph()

根据定义,Graph(图)是nodes(节点)(顶点)以及已识别的节点对(称为边、连线等)的集合。在NetworkX中,所有hashable object(哈希值对象) 都是nodes(节点),比如文本字符串图像XML对象Graph对象自定义节点 等等。

hashable object(哈希值对象):含有一个哈希值并且永不改变的对象是哈希值对象(即含有一个__hash__()方法),而且可以与其他对象进行比较(即含有一个__eq__()方法)。含有相同的哈希值才会让哈希值对象相同。哈希性使对象可用作字典键和集合成员,因为这些数据结构在内部使用哈希值。大多数Python的不可更改值的内置对象都是哈希的;而可改变值的对象(比如列表或字典)并不是;一些不可更改值的对象(比如元组和不可变集合)只有在所有元素都是哈希值时才是哈希的。所有自定义类的对象默认都是哈希的。它们相较而言都是不等的(除了它们自身),因为它们的哈希值是id()。

  • Note:Python的None对象不可作为node使用。这决定了在许多函数中是否分配了可选函数参数。

Nodes(节点)

图像对象G的元素添加可以有许多种方式。NetworkX包括许多图形生成器函数和工具,可以读取和写入多种格式的图形

首先通过简单的操作来开始。每次添加一个node(节点)

G.add_node(1)

或者通过迭代构造器添加nodes,比如列表

G.add_nodes_from([2,3])

也可以在添加节点的同时设置属性,只需要在构造器里按照==(node, node_attribute_dict)==的元组格式添加内容即可

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

节点的属性在下文有详细介绍。

可以从别的Graph对象中继承节点

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

此时GH中所有节点作为自己的节点。
相反地,也可以H作为G的一个节点

G.add_node(H)

这种灵活性是非常强大的,它允许graphs of graphs, graphs of files, graphs of functions and much more。可以考虑如何在实际应用中搭建关系,将节点作为有用的实体。当然,您可以在G中始终使用唯一标识符,如果愿意的话,还可以使用一个单独的字典,按标识符键接节点信息。

  • Note:如果节点对象的哈希值是它的内容,那就不要改动它。

Edges(边)

G可以一次添加一条边

G.add_edge(1,2)
e = (2,3)
G.add_edge(*e)

也可以添加列表

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

或者是 ebunch对象里的边。ebunch对象是储存边元组(edge-tuple)的迭代构造器。一个边元组可以是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") # add node "spam"
G.add_nodes_from("spam") # add 4 nodes: "s", "p", "a", "m"
G.add_edge(3, "m")

至此,G含有8个节点和3个边,可以用下面的方法查看

G.number_of_nodes()
G.number_of_edges()
  • Note:邻接报告的顺序(例如,G.adj, G.successors,G.predecessors)是边相加的顺序。然而,G.edge的顺序是邻接的顺序,它既包括节点的顺序,也包括每个节点的邻接顺序。请看下面的例子:
DG = nx.DiGraph()
DG.add_edge(2,1) # adds the nodes in order 2, 1
DG.add_edge(1,3)
DG.add_edge(2,4)
DG.add_edge(1,2)
assert list(DG.successors(2)) == [1,4]
assert list(DG.edges) == [(2,1),(2,4),(1,3),(1,2)]

检查Graph对象的元素

有4个基本的graph属性实用报告来检查节点和边:G.nodes,G.edges,G.adj和G.degree。这些是图中节点、边、邻居(邻接)和节点度的类似集合的视

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值