循环生成100个numpy节点数组的存储与子图分析问题
问题描述
这是一个NetworkX相关问题:
I是数组格式的节点列表(不在nx.nodes列表中)- 需要将100组节点以
X={I₁,I₂,…,I₁₀₀}的形式存入文件,文件共100行,每行是用空格分隔的感染节点列表 - 之后要基于每个
I_i列表生成子图,并找出每个子图的中心(共100个)
当前循环会生成100个对应I的numpy数组,想将这些数组存储到变量中以便后续使用,优先考虑存入文本文件!但以下代码无法运行:
I_collect = np.zeros(5) for counter in range(100): t, S, I = EoN.fast_SIS(g, tau, gamma, tmax = 10, initial_infecteds = 0) I_collect(counter) = I;
报错信息:
I_collect(counter) = I; ^ SyntaxError: can't assign to function call
解决方案
1. 修复语法错误
你用I_collect(counter) = I是Python的错误写法——numpy数组的索引要用方括号[],而非圆括号()。另外np.zeros(5)只创建了长度为5的一维数组,根本存不下100组结果,建议用列表这种动态结构来存储。
2. 同时存储到变量与文本文件
用列表收集所有I数组的同时,逐行写入文本文件,一次操作满足两个需求:
import numpy as np import networkx as nx import EoN # 初始化列表存储所有I数组 I_collect = [] # 打开文件准备写入(自动处理关闭) with open("infected_nodes.txt", "w") as f: for _ in range(100): t, S, I = EoN.fast_SIS(g, tau, gamma, tmax=10, initial_infecteds=0) # 将numpy数组转成列表存入变量 I_collect.append(I.tolist()) # 把数组元素转成字符串,用空格拼接后写入一行 line = " ".join(map(str, I)) + "\n" f.write(line)
3. 后续生成子图并找中心
可以直接用I_collect里的内容,或者从文件读取数据,生成子图并计算中心性(这里以度中心性为例,可根据需求替换成介数、接近性中心性等):
# 示例:遍历所有I_i生成子图并找中心 for i_nodes in I_collect: # 生成子图(自动忽略原图中不存在的节点) subgraph = g.subgraph(i_nodes) # 计算度中心性 centrality = nx.degree_centrality(subgraph) # 取得分最高的节点作为中心 center_node = max(centrality, key=centrality.get) print(f"当前子图中心节点:{center_node}")
关键提示
- 用
with open操作文件无需手动关闭,避免资源泄漏 - 写入文件时,必须把numpy数组元素转成字符串才能拼接成空格分隔的格式
- 如果
I中的节点不在原图g中,生成子图时会自动过滤无效节点,无需额外处理
内容的提问来源于stack exchange,提问作者Formal_that
相关产品推荐
相关产品推荐

