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

如何在Python中保存joblib并行运算的结果?

如何把joblib并行计算的结果存到变量里复用

Hey there! 其实你已经在代码里做了最关键的一步——把Parallel(...)()的结果赋值给run变量了!这个调用本身就会返回所有并行任务的结果列表,只要你把它存在变量里,后面就能随便用啦。我猜你可能是觉得结果格式不太好处理,或者之前没注意到赋值后的变量可以直接用?下面给你梳理清楚:

首先,确认变量赋值是对的

你现在的代码里,run = Parallel(...)()这行完全正确——run就是所有任务输出的集合。每个元素都是CurrentStepbyStep返回的那个长度为8的列表,对应每个任务的volt、phasediff等结果。

如果之前你没赋值直接运行Parallel(...)(),Python确实会默认打印整个结果列表,但只要赋值给变量(比如run),就不会自动打印了,除非你主动print(run)。

把结果转换成更易用的格式

如果想更方便地按字段提取数据,或者整理成和你的循环维度匹配的结构,可以试试下面的方法:

方法1:转换成NumPy结构化数组(按字段名访问)

这样你可以直接用字段名(比如totCurr)提取所有对应结果,不用记索引:

import numpy as np

# 定义每个输出字段的名称和类型
result_dtype = [
    ('volt', float),
    ('phasediff', float),
    ('ij1', float),
    ('ij2', float),
    ('iqp', float),
    ('sineCurr', float),
    ('cosineCurr', float),
    ('totCurr', float)
]

# 把run列表转成结构化数组
results_struct = np.array(run, dtype=result_dtype)

# 现在可以直接按字段名取数,比如提取所有的总电流
all_total_currents = results_struct['totCurr']
# 提取所有的电压值
all_voltages = results_struct['volt']

方法2:整理成和循环维度匹配的三维数组

你的任务是双重循环(先遍历steps再遍历Vdc_arr),可以把扁平的结果列表重塑成(steps, xsize, 8)的三维数组,方便按步数或电压值索引:

# 先转成普通的二维数组(每个行是一个任务的8个输出)
flat_results = np.array(run)
# 重塑成三维结构:(步数, 电压点数, 8个输出字段)
structured_results = flat_results.reshape(steps, xsize, 8)

# 举个例子:取第0步所有电压对应的总电流(totCurr是返回列表的第8个元素,索引为7)
step_0_all_totcurr = structured_results[0, :, 7]
# 取第20个电压值下,所有步数的相位差(phasediff是第2个元素,索引为1)
vdc_20_all_phasediff = structured_results[:, 20, 1]

小提醒

  • loky后端是joblib默认的CPU密集型任务后端,你的选择很合适;
  • 如果后续不需要所有字段,可以修改CurrentStepbyStep只返回需要的结果,减少内存占用;
  • 要是担心内存问题,可以考虑用batch_size参数分批处理,但你的规模看起来不用太担心。

内容的提问来源于stack exchange,提问作者Lost In Euclids 5th Postulate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:23:10