networkx学习记录

news2025/7/19 11:22:11

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 nx

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML网页设计结课作业——11张精美网页 html+css+javascript+bootstarp

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

学姐突然问我键盘怎么选?原来是为了这个...

前言&#xff1a; 上个星期学姐来问我该买啥键盘&#xff0c;说是自己用的笔记本的键盘实在是不太好用&#xff0c;很喜欢机械键盘的手感&#xff0c;但是常规的机械键盘有太大了而且声音十分大&#xff0c;对她们女生来说并不是很友好。于是我给她推荐了我现在正在用的这款键盘…

头歌-信息安全技术-Java生成验证码

头歌-信息安全技术-Java生成验证码一、第1关&#xff1a;使用Servlet生成验证码1、任务描述2、编程要求3、评测代码二、第2关&#xff1a;用户登录时校验验证码是否正确1、任务描述2、编程要求3、评测代码三、第3关&#xff1a;使用Kaptcha组件生成验证码1、任务描述2、编程要求…

2023年前端开发未来可期

☆ 对于很多质疑&#xff0c;很多不解&#xff0c;本文将从 △ 目前企业内前端开发职业的占比&#xff1b; △ 目前业内开发语言的受欢迎程度&#xff1b; △ 近期社区问答活跃度&#xff1b; 等维度来说明目前前端这个职业的所处位置。 ☆ 还有强硬的干货&#xff0c;通过深入…

跳槽前恶补面试题,成功上岸阿里,拿到33k的测开offer

不知不觉间&#xff0c;时间过得真快啊。作为一名程序员&#xff0c;应该都清楚每年的3、4月份和9、10月份都是跳槽的黄金季&#xff0c;各大企业在这段时间会大量招聘人才。在这段时间里&#xff0c;有人欢喜有人悲。想必各位在跳槽前都会做好充足的准备&#xff0c;同样做足了…

详细讲解网络协议:TCP和UDP什么区别?

该文章是学习了 B 站 up 主的视频做的总结&#xff0c;讲的很通俗易懂&#xff0c;首先感谢博主的分享。视频地址&#xff1a;https://www.bilibili.com/video/BV1kV411j7hA/?spm_id_from333.337.search-card.all.click&vd_source0a3d4c746a63d737330e738fa043eaf6 重新认…

【HDU No. 3567】八数码 II Eight II

【HDU No. 3567】八数码 II Eight II 杭电OJ 题目地址 【题意】 八数码&#xff0c;也叫作“九宫格”&#xff0c;来自一个古老的游戏。在这个游戏中&#xff0c;你将得到一个33的棋盘和8个方块。方块的编号为1&#xff5e;8&#xff0c;其中一块方块丢失&#xff0c;称之为“…

【python】基础复习

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录python的应用基础语法编码标识符python保留字第一个注释多行语句数字(Number)类型字符串(String)print 默认输出是换行的&#xff0c;如果要实现不换行需要在变量末尾加上 end""&#xff1a;impor…

猿创征文|在校大学生学习UI设计必备工具及日常生活中使用的软件

嗨&#xff0c;大家好&#xff0c;我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助&#xff0c;请支持一波。 希望未来可以一起学习交流。 我是一名在校大二的学生&#xff0c;目前在学习关于UI设计方向的一些课程&#xff0c;平时会用到UI设计必备的工…

我终于读懂了适配器模式。。。

文章目录&#x1f5fe;&#x1f306;什么是适配器模式&#xff1f;&#x1f3ef;类适配器模式&#x1f3f0;对象适配器模式⛺️接口适配器模式&#x1f3ed;适配器模式在SpringMVC 框架应用的源码剖析&#x1f5fc;适配器模式的注意事项和细节&#x1f306;什么是适配器模式&am…

基于SDN环境下的DDoS异常攻击的检测与缓解--实验

基于SDN环境下的DDoS异常攻击的检测与缓解--实验基于SDN环境下的DDoS异常攻击的检测与缓解--实验1.安装floodlight2.安装sFlow-RT流量监控设备3.命令行安装curl工具4.构建拓扑5.DDoS 攻击检测6.DDoS 攻击防御7.总结申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&am…

PNG怎么转换成PDF?这篇文章教会你

有时候我们需要查找一些图片资料并将它打印出来&#xff0c;但是在网上的图片大多是以PNG格式存在的&#xff0c;这个时候&#xff0c;我们就需要先利用一些转换软件把PNG转换成PDF文件的格式&#xff0c;从而方便我们进行打印。那么你们知道PNG转PDF怎么转换吗&#xff1f;今天…

第四章:前缀和、差分(数列)

前缀和差分一、前缀和1、 什么是前缀和2、 前缀和的作用3、 前缀和的例题和模板&#xff08;1&#xff09;一维数组的前缀和C版C版&#xff08;2&#xff09;二维数组的前缀和a.思路&#xff1a;b.题目和模板&#xff1a;C版C版二、差分1、什么是差分&#xff1f;2、差分有什么…

FFplay文档解读-43-视频过滤器十八

29.170 telecine 将电视电影处理应用于视频。 此过滤器接受以下选项&#xff1a; first_field选项解释top, ttop field firstbottom, b底部字段优先默认值为top pattern一串数字&#xff0c;表示希望应用的下拉模式。 默认值为23。 Some typical patterns:NTSC output (30i…

传统纸业如何实现数字化,S2B2C系统网站赋能渠道提升供应链管理效率

一千多年前&#xff0c;我们老祖宗发明了造纸术&#xff0c;纸张成为方便、廉价的信息载体&#xff0c;由此影响了中国乃至世界文明的进程。如今&#xff0c;随着信息技术的普及&#xff0c;纸张作为信息载体的功能日益弱化&#xff0c;但作为一种环保材料将会更广泛地融入我们…

通过宠物商店理解java面向对象

前言&#xff1a;本篇博客&#xff0c;适合刚刚学完java基础语法的但是&#xff0c;对于面向对象&#xff0c;理解不够深刻的读者&#xff0c;本文通过经典的宠物商店&#xff0c;来让读者深刻的理解&#xff0c;面向对象&#xff0c;IS-A&#xff0c;HAS-A法则。本文不仅仅是简…

Spring更简单保存和获取bean对象的方法(注解)

Spring更简单保存和获取bean对象的方法前置准备将bean对象更为简单地保存到Spring容器中&#xff08;使用注解&#xff09;【使用类注解】 (是写在类前的)为什么要这么多类注解&#xff1f;类注解之间的关系使用类注解 Bean 命名规则使用方法注解&#xff08;Bean&#xff09;不…

[MySQL]数据库的约束与表的设计

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 文章目录 1.数据库约束 1.1 约束类型 1.2 null 约束 1.…

Redis面试题

目录 面试题&#xff1a;谈谈你对Redis的理解&#xff1f; 面试题&#xff1a;Redis的基本数据类型 Redis的基本数据类型以及它们的应用场景&#xff1a; 面试题&#xff1a;redis内存淘汰机制 面试题&#xff1a;Redis持久化机制 RDB AOF 面试题&#xff1a;Redis写时复…

相似度系列-3:传统方法ROUGE ROUGE: A Package for Automatic Evaluation of Summaries

文章目录ROUGE: A Package for Automatic Evaluation of Summariesintroduction基础模型Rouge-NRouge_NmultiROUGE-L: Longest Common Subs equence1**Sentence-level LCS**2**Summary-Level LCS**ROUGE-W: Weighted Longest Common SubsequenceROUGE-S: Skip-Bigram Co-Occurr…