You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:30:50