在 for 循环的每次迭代中保存变量并稍后加载它们
Posted
技术标签:
【中文标题】在 for 循环的每次迭代中保存变量并稍后加载它们【英文标题】:Save variables in every iteration of for loop and load them later 【发布时间】:2018-11-13 20:54:31 【问题描述】:我想将变量 m
、n
、r
、X
、Y
(参见下面的代码)保存在一个文件中,例如 file_1
和
使用新文件名重复每次迭代
迭代次数,例如file_2
。
在 MATLAB 中,我可以简单地执行save(['data_',int2str(i),'.mat'],'variable1', 'variable2' )
,这样data(1)
将包含m
、n
、r
、X
、Y
; data(2)
将包含 m
、n
、r
、X
、Y
及其新值,等等
我如何在 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 的每次迭代的总和
如何将 np.arrays 附加到文件中并稍后将它们用于绘图目的