Networkx2.4的新功能 求电阻距离

Networkx2.4 的新功能 求电阻距离

题记
求图的两点间电阻距离是图论中的一类问题,Networkx2.4 内置了此功能,可以方便调用. 有关理论这里进行省略, 以后有时间进行补充. 这里针对具体图提供计算的方案.

import networkx as nx 
G = nx.Graph()
elist=[(0,1),(1,2),(2,3),(0,3),(0,2)]
G.add_edges_from(elist)
nx.draw(G,with_labels=True,node_size=1300,font_size=10,edge_color='b',width=5.0)
S= nx.resistance_distance(G, 0, 2, weight=None, invert_weight=True)
print(S)
import numpy
resistancematrix = numpy.zeros(shape=(4,4))
for i in range(4):
    for j in range(4):
        if i ==j :
            resistancematrix[i][j]= 0
        else:
            resistancematrix[i][j]=nx.resistance_distance(G, i, j, weight=None)
print(resistancematrix) 

当然这里电阻距离矩阵是对称的(可思考),我们进行了重复计算, 读者可自行优化。 下面是Mathematica 利用 laplacian 广义逆求解的代码.

resistanceDistance[connectionData_] := 
 Module[{Laplace = 
    Normal[(SparseArray[
          Band[{1, 1}] -> (Plus @@ (-#1) &) /@ #1] + #1 &)[
      SparseArray[
       Thread[Flatten[({Reverse[#1], #1} &) /@ connectionData, 
          1] -> -1]]]]}, ({#1, 
      Det[Delete[
         Transpose[
          Delete[Laplace, {{#1[[1]]}, {#1[[2]]}}]], {{#1[[1]]}, {#1[[
            2]]}}]]/
       Det[Delete[
         Transpose[Delete[Laplace, {#1[[1]]}]], {#1[[1]]}]]} &) /@ 
   Subsets[Range[Length[Laplace]], {2}]]
原创文章 16 获赞 8 访问量 1221

猜你喜欢

转载自blog.csdn.net/zlc_abc/article/details/104742932