import random
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
max_iter_num = 5 # 模拟的次数
G = nx.karate_club_graph() # 空手道俱乐部
for edge in G.edges:
G.add_edge(edge[0], edge[1], weight=random.uniform(0,1)) # 可不可以作为权值 病毒的感染能力
for node in G:
G.add_node(node, state = 0) # 用state标识状态 state=0 未激活,state=1 激活
seed = 33 # 选定33作为传染源
G.node[seed]['state'] = 1 # 表示33是感染的
all_infect_nodes = [] # 所有被感染的节点放在这里
all_infect_nodes.append(seed)
infected_graph = nx.Graph() # 被激活的图
infected_graph.add_node(seed)
for i in range(max_iter_num):
new_infect = list() # 新被感染的
t1 = '%s time' % i + ' %s nodes' % len(all_infect_nodes)
print(t1) # 当前有多少个节点被感染
# 画图
plt.title(t1)
nx.draw(infected_graph, with_labels=True)
plt.show()
# 感染的机会不止一次
for v in all_infect_nodes:
for nbr in G.neighbors(v):
if G.node[nbr]['state'] == 0: # 如果这个邻居节点没被感染
edge_data = G.get_edge_data(v, nbr)
if random.uniform(0, 1) < edge_data['weight']:
G.node[nbr]['state'] = 1
new_infect.append(nbr)
infected_graph.add_edge(v, nbr) # 画图 添加边
all_infect_nodes.extend(new_infect) # 将新感染的添加到
print('all_active_nodes:', all_infect_nodes)
同时还想请教如何出现节点图,谢谢Thanks♪(・ω・)ノ
这个代码的问题可能是缺少必要的依赖库,建议先检查是否安装了必要的库,如networkx、matplotlib和numpy等。如果没有安装,请在终端中使用pip install命令安装。
另外,在运行代码时需要注意,代码中存在一些中文字符,可能会导致编码问题。如果出现编码问题,可以将代码中的中文字符转换为英文字符,或者在文件开头添加# coding=utf-8,以指定编码格式。
关于如何出现节点图,你可以在代码中添加以下代码来显示节点图:
pos = nx.spring_layout(infected_graph)
nx.draw_networkx_nodes(infected_graph, pos, node_color='r', node_size=100)
nx.draw_networkx_edges(infected_graph, pos)
nx.draw_networkx_labels(infected_graph, pos, font_size=10, font_family='Arial')
plt.axis('off')
plt.show()
这段代码使用了networkx库中的spring_layout函数来生成节点的布局,然后使用draw_networkx_nodes、draw_networkx_edges和draw_networkx_labels函数来绘制节点、边和标签,最后使用plt.show()函数显示节点图。请注意,这段代码应该在for循环中的plt.show()函数之后添加。
networkx 没安装
求矩阵的逆,用np.linalg.inv(),返回array类型,但不改变原变量属性
print(np.linalg.inv(a))
print(a)
[[-5.25419957e+15 1.05083991e+16 -5.25419957e+15 -4.29687500e-01]
[ 1.05083991e+16 -2.10167983e+16 1.05083991e+16 7.59375000e-01]
[-5.25419957e+15 1.05083991e+16 -5.25419957e+15 -2.29687500e-01]
[-5.83333333e-01 1.06666667e+00 -3.83333333e-01 -1.00000000e-01]]
[[1 2 3 4]
[3 4 5 6]
[5 6 7 8]
[7 8 9 0]]