【问题标题】:Using weighted adjacency matrices to calculate global efficiency of said matrix using networkx使用加权邻接矩阵计算所述矩阵的全局效率,使用 networkx
【发布时间】: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


    【解决方案1】:

    使用权重,您可以将广度优先搜索与 Dijkstra 算法交换,这会增加 log|V| 的运行时间,请参阅 https://stackoverflow.com/a/25449911 的第二条评论

    如果您对运行时有疑问,您应该将在 python 中实现的networkxgraph-tooligraph 等 C 实现交换,参见例如对于(可能有偏见的)性能比较:https://graph-tool.skewed.de/performance

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多