需要调取networkx中graph实例的邻接矩阵,搜“network 邻接矩阵”没有迅速找到解决方案。我写一个吧。
错误获取:
networkx中有个adjacency_matrix()函数,得到的邻接表看形状虽然是N*N,但是打印出来会发现是这个格式:
(0, 1) 1
(0, 30) 1
(0, 33) 1
(0, 99) 1
第一列是源头和终止节点,第二列是权重。
但是,如果你下列语句遍历,是会报错的:ValueError: not enough values to unpack (expected 2, got 1)
# 错误示范
for (x,y), w in nx.adjacency_matrix(G):
print(x, y, w)
正确获取:
import networkx as nx
import numpy as np
A=np.array(nx.adjacency_matrix(G).todense())
转换为numpy矩阵是因为原始的格式不支持A[i][j]形式的索引。
成功得到邻接矩阵,解决!
[[0 0 0 ... 0 0 1]
[0 0 1 ... 0 0 0]
[0 1 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 1]
[1 0 0 ... 0 1 0]]
需要调取networkx中graph实例的邻接矩阵,搜“network 邻接矩阵”没有迅速找到解决方案。我写一个吧。错误获取:networkx中有个adjacency_matrix()函数,得到的邻接表看形状虽然是N*N,但是打印出来会发现是这个格式: (0, 1) 1 (0, 30) 1 (0, 33) 1 (0, 99) 1第一列是源头...
最近有用到关于
邻接矩阵
的一些问题,平时不太常用所以一直没注意到
networkx
里面的函数,权当笔记了,有兴趣查看官方文档,这里只举个小例子。
import
networkx
as nx # 导入必要的函数包
import scipy as sp
import operator
import matplotlib.pyplot as plp
h = nx.Graph() # 我这里需要用到的
图
h.add_nodes_from(list(range(1, 9)))
h.add_edges_from([(
大家好,今天和大家分享一下
图
算法
中
的一些基础知识,已经如何使用
python
中
的
networkx
库时间网络
图
的基本建模操作。内容较多,可通过右侧目录栏跳转。
1.
邻接矩阵
1.1 方法介绍
邻接矩阵
是
图
的等价表示,
邻接矩阵
的元素代表网络节点连线之间的交互关系。
如
图
1,对于一个无向无权网络,它的
邻接矩阵
A是一个对称矩阵。其
中
对角线元素都为0,;无向表示节点之间的连线不区分方向,即节点之间是双向关系,;无权代表节点之间的边没有权重,此时
邻接矩阵
A是由0,1元素组成的,如果节点之间存在连边那么元素等于1
你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿
在
networkx
中
的
邻接矩阵
有两类(不是指数学意义上的)。数学意义上的无向
图
的
邻接矩阵
必定是对称矩阵,因此在
networkx
里只要给出上三角的即可,或者用元组表示
三种
邻接矩阵
a=np.zeros((5,5))#第一种
a[0,1:]=[9,2,4,7]
a[1,2:4]=[3,4]
a[2,3:]=[8,4]
a[3,4]=6
print(a)
b=[(1,2,9),(1,3,2),(1,4,4),(1,5,7),(2,3,3),(2,4,4),(
上学期为了做一个研究的作业,拿到了一个学习平台上用户给其他用户发表的博客评论的数据,要用这些数据做社会网络分析(没错,就是SNA)。但是ucinet这个社会网络分析工具只接受矩阵格式的数据,本白嫖大王于是在CSDN、知乎、各种问答网站上一通搜索提问邀请三连,最终啥也没搜到,只好自己动手丰衣足食。在自己提的知乎问题下面回复已解决后出乎意料竟然有很多小伙伴找我要代码,碍于知乎不能发文件有的小伙伴又不想提供邮箱,我就写个博客,下次直接扔个链接。
言归正传,首先粘上完整代码方便和我一样的白嫖大王复制粘贴。(netd
我所以理解的
图
布局:单纯nx.drwa()画出的
图
,保存后再打开会出现不一样的情况,所以需要布局来固定每个点的位置。一些布局的api可以直接看原博客:
NetworkX
系列教程(8)-Drawing Graph
如果只是简单使用nx.draw,是无法定制出自己需要的graph,并且这样的graph内的点坐标的不定的,运行一次变一次,实际
中
一般是要求固定的位置,这就需要到布局的概念了。详细的画
图
信息可以看这里。
networkx
线性代数部分
由
图
打印出
邻接矩阵
list、特征值list;
#定义
图
的
NetworkX
是一个
Python
包,用于创建、操作和学习复杂网络。
邻接矩阵
是一种表示
图
的数据结构,其
中
每个节点都表示为矩阵
中
的行和列,而边则表示为矩阵
中
的值。
在
NetworkX
中
,可以使用nx.to_numpy_matrix()函数将
图
转换为
邻接矩阵
。该函数返回一个NumPy矩阵,其
中
每个元素的值表示相应节点之间是否存在连接。
下面是一个简单的示例,演示如何使用nx.to_numpy_matrix()函数将
图
转换为
邻接矩阵
:
import
networkx
as nx
import numpy as np
# 创建一个简单的无向
图
G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3), (3, 0)])
# 将
图
转换为
邻接矩阵
matrix = nx.to_numpy_matrix(G)
# 打印
邻接矩阵
print(matrix)
[[0. 1. 0. 1.]
[1. 0. 1. 0.]
[0. 1. 0. 1.]
[1. 0. 1. 0.]]
在这个示例
中
,我们创建了一个简单的无向
图
,并使用nx.to_numpy_matrix()函数将其转换为
邻接矩阵
。然后,我们打印了这个矩阵。注意,矩阵
中
的每个元素都是浮点数,而不是整数。这是因为在
NetworkX
中
,
图
可以包含带权边。如果
图
中
所有的边都是无权的,可以使用astype(int)将矩阵转换为整数类型。
【Python】Python-numpy逻辑报错:The truth value of an array with more than one element is ambiguous. Us
144580
报错:WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after con
Z.风止:
【PSO】PSO算法测试函数集CEC2013的demo加注释解析
weixin_49310410:
【Python】LDA使用LatentDirichletAll报错TypeError: __init__() got an unexpected keyword argument ‘n_topics‘
2301_78112219:
【机器学习】sklearn-GBDT调参-GradientBoostingClassifier
m0_51406412:
【PSO】离散粒子群算法(DPSO)和离散二进制粒子群算法(BPSO )
weixin_49654031: