如何使用python中的networkx来生成一个图
作者:wh柒八九 时间:2022-08-13 05:13:32
python networkx来生成一个图
使用python提供的第三方的库networkx,networkx是专门用来生成图论和网络科学里面各种图及其各种计算函数的。
(a).如果已知一个图的图形,如何将其生成对应的邻接矩阵,这个在networkx里面提供了函数nx.to_numpy_matrix(G)来完成
(b).如果已知一个图的邻接矩阵,如何将其转化成对应的图形
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Jun 16 20:13:42 2019
@author: Administrator
"""
"""
这个函数的作用是将一个矩阵给转换成一个图,
矩阵以多维列表的形式存在,即列表的列表
此处的转换是针对无向图
根据邻接矩阵得到图之后,我们就可以调用networkx
里面的各种函数来分析图的性质,比如度分布,
平均路径程度,聚类系数等一系列图的拓扑性质
"""
import networkx as nx
def matrix_to_graph():
G = nx.Graph()
#matrix为邻接矩阵,以多维列表的形式存在
matrix = [[0, 1, 1],[1,0,1],[1,1,0]]
nodes = range(len(matrix))
G.add_nodes_from(nodes)
for i in range(len(matrix)):
for j in range(len(matrix)):
if(matrix[i][j] == 1):
G.add_edge(i, j)
position = nx.circular_layout(G)
nx.draw_networkx_nodes(G,position, nodelist=nodes, node_color="r")
nx.draw_networkx_edges(G,position)
nx.draw_networkx_labels(G,position)
print(nx.to_numpy_matrix(G))
matrix_to_graph()
运行结果如下:
networkx随机图生成
导入包
import networkx as nx #导入networkx包
import random #导入random包
import matplotlib.pyplot as plt #导入画图工具包
新建图
G = nx.Graph() #建立无向图
H = nx.path_graph(100) #添加节点
G.add_nodes_from(H) #添加节点
随机概率添加边的函数
def rand_edge(vi,vj,p=0.2): #默认概率p=0.1
probability =random.random()#生成随机小数
if(probability<p): #如果小于p
G.add_edge(vi,vj) #连接vi和vj节点
添加边
i=0
while (i<100):
j=0
while(j<i):
rand_edge(i,j) #调用rand_edge()
j +=1
i +=1
matplotlib画图
连通子图
number_components = nx.number_connected_components(G)
largest_components = max(nx.connected_components(G), key=len)
print("最大连通子图:" + str(largest_components))
print("最大连通子图长度:"+ str(len(largest_components)))
print("连通子图个数: "+str(nx.number_connected_components(G)))
节点的度
nx.degree(G)
DVweight = G.degree()
degree_sum = sum(span for n, span in DVweight) #各节点度数之和
degree_max = max(span for n, span in DVweight) #节点最大度数
代码
import networkx as nx #导入networkx包
import random #导入random包
import matplotlib.pyplot as plt
G = nx.Graph()
H = nx.path_graph(100)
G.add_nodes_from(H)
def rand_edge(vi,vj,p=0.2):
probability =random.random()
if(probability<p):
G.add_edge(vi,vj)
i=0
while (i<100):
j=0
while(j<i):
rand_edge(i,j)
j +=1
i +=1
number_components = nx.number_connected_components(G)
largest_components = max(nx.connected_components(G), key=len)
nx.degree(G)
DVweight = G.degree()
degree_sum = sum(span for n, span in DVweight) #各节点度数之和
degree_max = max(span for n, span in DVweight)#节点最大度数
print("度数之和: " + str(degree_sum))
print("节点最大度数:" + str(degree_max))
print("最大连通子图:" + str(largest_components))
print("最大连通子图长度:"+ str(len(largest_components)))
print("连通子图个数: "+str(nx.number_connected_components(G)))
nx.draw_networkx(G, with_labels=True)
plt.show()
来源:https://blog.csdn.net/qq_31960623/article/details/100547277
标签:python,networkx,生成图
0
投稿
猜你喜欢
python3.3实现乘法表示例
2023-11-01 11:06:55
详解Python中break语句的用法
2021-12-21 22:18:17
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2021-11-19 12:02:27
python反转(逆序)字符串的6种方法详细
2023-03-14 10:38:41
django中使用原生sql语句的方法步骤
2023-06-29 16:36:07
JS中window.open全屏命令解析及使用示例
2024-04-10 16:12:54
js实现登录注册框手机号和验证码校验(前端部分)
2023-09-13 02:41:37
javascript中css的float特殊写法
2007-12-24 20:24:00
PHP实现动态删除XML数据的方法示例
2024-06-05 09:51:28
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2023-12-10 15:45:59
何时将数据装载到Application 或 Session 对象中去?
2009-12-03 20:17:00
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2022-08-25 05:19:38
Python实现自动化整理文件的示例代码
2021-11-04 02:39:36
如何使用django的MTV开发模式返回一个网页
2023-07-04 21:47:06
Oracle 常用的SQL语句
2009-08-02 07:09:00
解决Django一个表单对应多个按钮的问题
2021-07-15 15:34:55
JavaScript中的ArrayBuffer详细介绍
2024-04-19 11:02:13
vue 解决兄弟组件、跨组件深层次的通信操作
2024-05-09 15:12:55
ASP连接MySQL数据库代码示例
2010-03-14 11:24:00
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2024-04-17 09:52:06