networkx学习记录
创始人
2024-01-21 02:06:39
0

networkx学习记录

  • networkx学习记录
    • 1. 创建图表
    • 2. 节点
    • 3. 边
    • 4.检查图的元素
    • 5.从图中删除元素
    • 6.使用图构造函数
    • 7.访问边和邻居
    • 8.向图、节点和边添加属性
    • 9.有向图
    • 10. 绘制图形

networkx学习记录

1. 创建图表

创建一个空图

import networkx as nx
G = nx.Graph()

此时如果报以下错误:
在这里插入图片描述则注意文件名不能是:networkx.py,修改文件名就好了。

2. 节点

图G的增长可以通过添加节点来实现

  • 添加节点方式一:添加一个节点,节点名为100(注意不是添加了100个节点)
G.add_node(100)
  • 添加节点方式二:
G.add_nodes_from([2, 3])
  • 添加节点方式三:合并其他图节点
H = nx.path_graph(10)
G.add_nodes_from(H)

G 现在包含 H 的节点作为 G 的节点(节点编号从0开始,到9结束)。
相比之下,您可以将图形 H用作G中的节点。

G.add_node(H)

图G现在包含H作为一个节点。图G现在包含H作为一个节点。 这种灵活性非常强大,因为它允许图形图形、文件图形、函数图形等等。

简单示例:
在这里插入图片描述

3. 边

也可以通过添加边来实现

  • 可以通过add_edge()一次添加一条边:指定的参数就是边所连接的两个节点
G.add_edge(1, 2)
  • 也可以通过元组的方式添加:
e = (2, 3)
G.add_edge(*e)  # unpack edge tuple*

简单示例:
在这里插入图片描述

  • 或者通过列表方式,同时添加多条边
G.add_edges_from([(1, 2), (1, 3)])

简单示例:注意看对比
在这里插入图片描述

  • 通过字符串添加
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.clear()会清除所有节点和边
在这里插入图片描述

4.检查图的元素

G.number_of_nodes():图G中结点的数量
G.number_of_edges():图G中边的数量
G.nodes():图G中的节点的情况
G.edges():图G中边的情况
G.adj():某一结点的邻接节点情况
G.degree():节点的度
在这里插入图片描述
G.edges()、G.degree()可以添加参数,具体的示例如下:

print(G.edges([1, 'm']))
print(G.degree([1, 'm']))

5.从图中删除元素

可以以与添加类似的方式从图中删除节点和边。
使用方法:Graph.remove_node(),Graph.remove_nodes_from(),Graph.remove_edge()和Graph.remove_edges_from(),例如:

G.remove_node(2)
G.remove_nodes_from("spam")
list(G.nodes)
G.remove_edge(1, 3)

6.使用图构造函数

图形对象不必增量构建 - 数据指定图结构可以直接传递给各种构造函数图类。
通过实例化其中一个图来创建图结构时类,可以指定多种格式的数据。

import networkx as nxG = nx.Graph()
G.add_edge(1, 2)
H = nx.DiGraph(G)  # create a DiGraph using the connections from G
print("edges:",list(H.edges()))
edgelist = [(0, 1), (1, 2), (2, 3)]
H = nx.Graph(edgelist)  # create a graph from an edge list
print("edges:",list(H.edges()))
adjacency_dict = {0: (1, 2), 1: (0, 2), 2: (0, 1)}
H = nx.Graph(adjacency_dict)  # create a Graph dict mapping nodes to nbrs
print("edges:",list(H.edges()))

在这里插入图片描述

7.访问边和邻居

除了视图G.edges和G.adj,使用下标符号可以访问边和邻居:

G = nx.Graph([(1, 2, {"color": "yellow"})])
G[1]  # same as G.adj[1]
G[1][2]
G.edges[1, 2]

在这里插入图片描述
如果边存在,还可以使用下标符号获取/设置边的属性:

G.add_edge(1, 3)
G[1][3]['color'] = "blue"
G.edges[1, 2]['color'] = "red"
G.edges[1, 2]

所有(节点,邻接)对的快速检查是使用G.adjacency() G.adj.items()。请注意,对于无向图,邻接迭代会看到每条边两次。

G = nx.Graph()
G.add_weighted_edges_from([(1, 2, 0.125), (1, 3, 0.75), (2, 4, 1.2), (3, 4, 0.375)])
for n, nbrs in G.adj.items():for nbr, eattr in nbrs.items():wt = eattr['weight']if wt < 0.5: print(f"({n}, {nbr}, {wt:.3})")

在这里插入图片描述
使用 edge 属性可以方便地访问所有边:


G = nx.Graph()
G.add_weighted_edges_from([(1, 2, 0.125), (1, 3, 0.75), (2, 4, 1.2), (3, 4, 0.375)])
for n, nbrs in G.adj.items():for nbr, eattr in nbrs.items():wt = eattr['weight']# if wt < 0.5: print(f"({n}, {nbr}, {wt:.3})")
for (u, v, wt) in G.edges.data('weight'):if wt < 0.5:print(f"({u}, {v}, {wt:.3})")

在这里插入图片描述

8.向图、节点和边添加属性

诸如权重、标签、颜色或任何您喜欢的 Python 对象之类的属性,可以附加到图、节点或边。

每个图、节点和边都可以在关联的属性字典(键必须是可散列的)。 默认情况下,这些是空的,但是可以使用 add_edge、add_node 或直接添加或更改属性操作名为“G.graph”、“G.nodes”和图形“G”的“G.edges”。

  • 图形属性
    创建新图形时分配图形属性:
G = nx.Graph(day="Friday")
G.graph

修改属性:

G.graph['day'] = "Monday"
G.graph
  • 节点属性
    使用 add_node()、add_nodes_from() 或 G.nodes 添加节点属性:
G.add_node(1, time='5pm')
G.add_nodes_from([3], time='2pm')
G.nodes[1]
G.nodes[1]['room'] = 714
G.nodes.data()

在这里插入图片描述

注意:请注意,将节点添加到 G.nodes 不会将其添加到图形中,请使用G.add_node() 添加新节点。 缘也是如此。

  • 边缘属性
    使用 add_edge()、add_edges_from() 或下标符号添加/更改边属性:
G.add_edge(1, 2, weight=4.7 )
G.add_edges_from([(3, 4), (4, 5)], color='red')
G.add_edges_from([(1, 2, {'color': 'blue'}), (2, 3, {'weight': 8})])
G[1][2]['weight'] = 4.7
G.edges[3, 4]['weight'] = 4.2

特殊属性 weight 应该是数字,因为它被使用需要加权边的算法。

9.有向图

DiGraph 类提供特定的附加方法和属性到有向边,例如:DiGraph.out_edges、DiGraph.in_degree、DiGraph.predecessors、DiGraph.successors 等。
为了让算法能够轻松地处理这两个类,有向版本的neighbors 等价于successors, degree 等价于in_degree 和 out_degree 。

DG = nx.DiGraph()
DG.add_weighted_edges_from([(1, 2, 0.5), (3, 1, 0.75)])
DG.out_degree(1, weight='weight')
DG.degree(1, weight='weight')
print(list(DG.successors(3)))
print(list(DG.neighbors(1)))

在这里插入图片描述

10. 绘制图形

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='normal')plt.show()

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...