如何使用python中的networkx來生成一個圖
python networkx來生成一個圖
使用python提供的第三方的庫networkx,networkx是專門用來生成圖論和網(wǎng)絡科學里面各種圖及其各種計算函數(shù)的。
(a).如果已知一個圖的圖形,如何將其生成對應的鄰接矩陣,這個在networkx里面提供了函數(shù)nx.to_numpy_matrix(G)來完成
(b).如果已知一個圖的鄰接矩陣,如何將其轉(zhuǎn)化成對應的圖形
代碼如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Jun 16 20:13:42 2019
@author: Administrator
"""
"""
這個函數(shù)的作用是將一個矩陣給轉(zhuǎn)換成一個圖,
矩陣以多維列表的形式存在,即列表的列表
此處的轉(zhuǎn)換是針對無向圖
根據(jù)鄰接矩陣得到圖之后,我們就可以調(diào)用networkx
里面的各種函數(shù)來分析圖的性質(zhì),比如度分布,
平均路徑程度,聚類系數(shù)等一系列圖的拓撲性質(zhì)
"""
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()
運行結(jié)果如下:

networkx隨機圖生成
導入包
import networkx as nx ? #導入networkx包 import random?? ??? ??? ?#導入random包 import matplotlib.pyplot as plt #導入畫圖工具包
新建圖
G = nx.Graph()?? ??? ??? ?#建立無向圖 H = nx.path_graph(100)?? ?#添加節(jié)點 G.add_nodes_from(H)?? ??? ?#添加節(jié)點
隨機概率添加邊的函數(shù)
def rand_edge(vi,vj,p=0.2):?? ??? ?#默認概率p=0.1 ? ? probability =random.random()#生成隨機小數(shù) ? ? if(probability<p):?? ??? ??? ?#如果小于p ? ? ? ? G.add_edge(vi,vj) ??? ??? ?#連接vi和vj節(jié)點
添加邊
i=0 while (i<100): ? ? j=0 ? ? while(j<i): ? ? ? ? ? ? rand_edge(i,j)?? ??? ?#調(diào)用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("連通子圖個數(shù): "+str(nx.number_connected_components(G)))節(jié)點的度
nx.degree(G) DVweight = G.degree() degree_sum = sum(span for n, span in DVweight) ?? ??? ?#各節(jié)點度數(shù)之和 degree_max = max(span for n, span in DVweight)?? ??? ?#節(jié)點最大度數(shù)
代碼
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) #各節(jié)點度數(shù)之和
degree_max = max(span for n, span in DVweight) #節(jié)點最大度數(shù)
print("度數(shù)之和: " + str(degree_sum))
print("節(jié)點最大度數(shù):" + str(degree_max))
print("最大連通子圖:" + str(largest_components))
print("最大連通子圖長度:"+ str(len(largest_components)))
print("連通子圖個數(shù): "+str(nx.number_connected_components(G)))
nx.draw_networkx(G, with_labels=True)
plt.show()
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python與Appium實現(xiàn)手機APP自動化測試的示例代碼
本文主要介紹了Python與Appium實現(xiàn)手機APP自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
編寫Python腳本把sqlAlchemy對象轉(zhuǎn)換成dict的教程
這篇文章主要介紹了編寫Python腳本把sqlAlchemy對象轉(zhuǎn)換成dict的教程,主要是基于Python的model類構(gòu)建一個轉(zhuǎn)換的方法,需要的朋友可以參考下2015-05-05
Jupyter安裝拓展nbextensions及解決官網(wǎng)下載慢的問題
這篇文章主要介紹了Jupyter安裝拓展nbextensions及解決官網(wǎng)下載慢的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
python中pandas nlargest()的詳細用法小結(jié)
df.nlargest()是一個DataFrame的方法,用于返回DataFrame中最大的n個值所在的行,通過調(diào)用nlargest()方法,我們返回了分數(shù)最高的三個行,并按照降序排列,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2023-10-10
python中CURL 和python requests的相互轉(zhuǎn)換實現(xiàn)
本文主要介紹了python中CURL 和python requests的相互轉(zhuǎn)換實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
python 實現(xiàn)調(diào)用子文件下的模塊方法
今天小編就為大家分享一篇python 實現(xiàn)調(diào)用子文件下的模塊方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
keras的ImageDataGenerator和flow()的用法說明
這篇文章主要介紹了keras的ImageDataGenerator和flow()的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

