python networkx 交通模拟_从Network Graph(反之亦然)有效创建邻接矩阵Python NetworkX...

I'm trying to get into creating network graphs and generating sparse matrices from them. From the wikipedia Laplacian matrix example, I decided to try and recreate the following network graph using networkx

How can one EFFICIENTLY convert between an adjacency matrix and a network graph?

For example, if I have a network graph, how can I quickly convert it to an adjacency matrix and if I have an adjacency graph how can I efficiently convert it to a network graph.

Below is my code for doing it and I feel like it's pretty inefficient for larger networks.

#!/usr/bin/python

import networkx as nx

import numpy as np

import matplotlib.pyplot as plt

import scipy as sp

import pandas as pd

%matplotlib inline

#Adjacent matrix

adj_matrix = np.matrix([[0,1,0,0,1,0],[1,0,1,0,1,0],[0,1,0,1,0,0],[0,0,1,0,1,1],[1,1,0,1,0,0],[0,0,0,1,0,0]])

adj_sparse = sp.sparse.coo_matrix(adj_matrix, dtype=np.int8)

labels = range(1,7)

DF_adj = pd.DataFrame(adj_sparse.toarray(),index=labels,columns=labels)

print DF_adj

# 1 2 3 4 5 6

#1 0 1 0 0 1 0

#2 1 0 1 0 1 0

#3 0 1 0 1 0 0

#4 0 0 1 0 1 1

#5 1 1 0 1 0 0

#6 0 0 0 1 0 0

#Network graph

G = nx.Graph()

G.add_nodes_from(labels)

#Connect nodes

for i in range(DF_adj.shape[0]):

col_label = DF_adj.columns[i]

for j in range(DF_adj.shape[1]):

row_label = DF_adj.index[j]

node = DF_adj.iloc[i,j]

if node == 1:

G.add_edge(col_label,row_label)

#Draw graph

nx.draw(G,with_labels = True)

#DRAWN GRAPH MATCHES THE GRAPH FROM WIKI

#Recreate adjacency matrix

DF_re = pd.DataFrame(np.zeros([len(G.nodes()),len(G.nodes())]),index=G.nodes(),columns=G.nodes())

for col_label,row_label in G.edges():

DF_re.loc[col_label,row_label] = 1

DF_re.loc[row_label,col_label] = 1

print G.edges()

#[(1, 2), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5), (4, 6)]

print DF_re

# 1 2 3 4 5 6

#1 0 1 0 0 1 0

#2 1 0 1 0 1 0

#3 0 1 0 1 0 0

#4 0 0 1 0 1 1

#5 1 1 0 1 0 0

#6 0 0 0 1 0 0

解决方案

How to convert from graph to adjacency matrix:

import scipy as sp

import networkx as nx

G=nx.fast_gnp_random_graph(100,0.04)

adj_matrix = nx.adjacency_matrix(G)

And from adjacency matrix to graph:

H=nx.Graph(adj_matrix) #if it's directed, use H=nx.DiGraph(adj_matrix)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值