复杂网络中的边权重
import networkx as nx
"""
边权重:复杂网络中边权重用来表示边两端的节点之间相互关系的强弱,
在无权网络中,每条边代表的节点之间的关系是一样的。但是实际网络
中,根据应用场景的不同,边权赋予方式可以不同,用Wij表示节点i和j
之间的连边的权重,可以定义边权重为边两端节点的度的乘积。
"""
# 初始化一个图
def init_graph():
G = nx.Graph()
filestr = ""
with open("test.txt") as files:
for line in files:
filestr += line.strip()
# 将字符串转换成列表
matrix = eval(filestr)
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)
return G
#计算边权重
def get_edge_weights(G):
# print("每个节点的编号以及度值如下:")
degree = list(nx.degree(G))
# print(degree)
# print("------------------------------------")
# print("图G的每条边如下:")
edgesList = []
for edge in nx.edges(G):
w = list(edge)
edgesList.append(w)
# print(edgesList)
#将节点的度值进行赋值
for edge in edgesList:
edge[0] = degree[edge[0]][1]
edge[1] = degree[edge[1]][1]
#用来存储每条边的权重
weights = []
for weight in edgesList:
w = 0
if(weight[1] > weight[0]):
w = weight[0]
else:
w = weight[1]
weights.append(w)
# print(weights)
#最后结果用字典的形式返回
end = {}
ss = list(nx.edges(G))
for e in ss:
index = ss.index(e)
end[e] = weights[index]
print(end)
def main():
G = init_graph()
get_edge_weights(G)
main()