在 for 循环的每次迭代中保存变量并稍后加载它们

Posted

技术标签:

【中文标题】在 for 循环的每次迭代中保存变量并稍后加载它们【英文标题】:Save variables in every iteration of for loop and load them later 【发布时间】:2018-11-13 20:54:31 【问题描述】:

我想将变量 mnrXY(参见下面的代码)保存在一个文件中,例如 file_1 和 使用新文件名重复每次迭代 迭代次数,例如file_2

在 MATLAB 中,我可以简单地执行save(['data_',int2str(i),'.mat'],'variable1', 'variable2' ),这样data(1) 将包含mnrXYdata(2) 将包含 mnrXY 及其新值,等等

我如何在 Python 中做同样的事情?

Test = 5
for i in range(Tests):
    r = 5
    m = 500
    n = 500
    X=np.random.rand(m,n)
    Y=np.random.rand(m,n)

【问题讨论】:

您可以使用pickle 库将变量保存到文件中 【参考方案1】:

pickle 库是通往这里的路。

import pickle
Tests = 5
data = 
for i in range(Tests):
    data['r'] = 5
    data['m'] = 500
    data['n'] = 500
    data['X'] = np.random.rand(data['m'],data['n'])
    data['Y'] = np.random.rand(data['m'],data['n'])
    with open('data.pickle'.format(i), 'wb') as f:
        pickle.dump(data, f)

这允许您稍后访问您的数据字典。例如,

with open('data0.pickle', 'rb') as f:
    data = pickle.load(f)
r = data['r']
m = data['m']

等等。

【讨论】:

如何假设我的循环一直到 40。我可以使用循环加载所有 40? 您始终可以将加载腌制数据的代码移动到 for 循环中,允许您加载全部 40 个。只需在 for 循环中更改文件的名称,就像上面的代码在保存中所做的那样数据。 非常感谢 Jwil 如果它对您有用,请随时接受答案,这样更多人就不会花时间输入他们的解决方案。 @Farouk Yahaya 我试图实现它。它在数据字下划线。并说“未解析的引用'数据'少......(Ctrl + F1)检查信息:此检查检测到应该解析但没有解析的名称。由于动态调度和鸭子类型,这可能在有限但有用的数量案例。***和类级别的项目比实例项目更受支持。"【参考方案2】:

下面是你如何在 python 中做同样的事情。

import numpy as np
Test = 2
for i in range(Test):
    r = 5
    m = 500
    n = 500
    X=np.random.rand(m,n)
    Y=np.random.rand(m,n)
    file_name = 'test_'+str(i)
    open(file_name,'w').write(str(r) + str(m) + str(n) + str(X) + str(Y))

【讨论】:

为什么要将它们转换为 str.它们是真正的价值。 X 和 Y 是矩阵。顺便说一句,我是 python 新手。 不强制转换会报错——TypeError: write() argument must be str, not numpy.ndarray 你能告诉我如何加载它吗?如果我确实加载了它,我会让它们恢复原来的格式吗?即标量和矩阵而不是字符串? 如果你想保留对象的属性,比如数据类型等等,那么最好使用pickle()来保存数据并将其保存为一个对象。 非常感谢桑奇特【参考方案3】:

如果您想在不使用任何库的情况下这样做,这是我的解决方案:

import numpy as np
Test = 5
for i in range(Test):
    r = 5
    m = 500
    n = 500
    X=np.random.rand(m,n)
    Y=np.random.rand(m,n)

    file = open('file_'.format(i+1), 'w')
    file.write('r = ;m = ;n = ;X = ;Y = '.format(r, m, n, X, Y))
    file.close()

加载保存的变量

exec(open('file_1', 'r').read())

【讨论】:

这对于小范围来说看起来很简单。我的循环将从 1 变为 40。加载时将它们一一执行可能会很烦人。

以上是关于在 for 循环的每次迭代中保存变量并稍后加载它们的主要内容,如果未能解决你的问题,请参考以下文章

我想在 for 循环中串联运行多个变量,我想取 x 和 y 的每次迭代的总和

如何保存 numpy 数组以便以后可以适当地加载它们?

如何将 np.arrays 附加到文件中并稍后将它们用于绘图目的

如何在for循环中等待每次迭代并在nodeJS中将响应作为API响应返回

web性能优化--算法优化

是否为每次迭代创建了 for 循环内的引用变量声明? [复制]