【发布时间】:2019-05-27 06:08:31
【问题描述】:
我一直在尝试通过查看不同节点组合的删除来研究对网络的影响。
为了研究这一点,我使用了 networkx 图论指标,即全局效率。但是,我认为 networkx 代码在计算全局效率时忽略了权重。因此,我进入并更改了源代码并添加了权重作为度量。它似乎在起作用,并且给了我与非加权方法不同的值,但速度非常慢(大约 20 倍)。
如何加快这些计算速度?
##The code I am running
import networkx
import numpy as np
from networkx import algorithms
from networkx.algorithms import efficiency
from networkx.algorithms.efficiency import global_efficiency
import pandas
data=pandas.read_csv("ones.csv")
lol = data.values.tolist()
data=pandas.read_csv("twos.csv")
lol2 = data.values.tolist()
combo=[["10pp", "10d"]]
GE_list=[]
for row in combo:
values = row
datasafe=pandas.read_csv("b1.csv", index_col=0)
datasafe.loc[values, :] = 0
datasafe[values] = 0
g=networkx.from_pandas_adjacency(datasafe)
ge=global_efficiency(g)
GE_list.append(ge)
extra=[""]
extra2=["full"]
combo.append(extra)
combo.append(extra2)
datasafe=pandas.read_csv("b1.csv", index_col=0)
g=networkx.from_pandas_adjacency(datasafe)
ge=global_efficiency(g)
GE_list.append(ge)
values = ["s6-8","p9-46v","p47r","p10p","IFSp","IFSa",'IFJp','IFJa','i6-8','a9-46v','a47r','a10p','9p','9a','9-46d','8C','8BL','8AV','8AD','47s','47L','10pp','10d','46','45','44']
datasafe=pandas.read_csv("b1.csv", index_col=0)
datasafe.loc[values, :] = 0
datasafe[values] = 0
g=networkx.from_pandas_adjacency(datasafe)
ge=global_efficiency(g)
GE_list.append(ge)
output=pandas.DataFrame(list(zip(combo, GE_list)))
output.to_csv('delete 1.csv',index=None)
##The change I made to the original networkx code
try:
eff = 1 / nx.shortest_path_length(G, u, v)
## changed to
try:
eff = 1 / nx.shortest_path_length(G, u, v, weight='weight')
以前使用我的未加权图表,我能够在 2 小时内处理我的数据,而目前它需要相同的时间来处理二十分之一的数据。请对我的代码或我可以运行的任何其他代码段提出任何改进建议。
Ps-我对python不是很了解,请多多包涵:)
【问题讨论】:
标签: python-3.x networkx adjacency-matrix