Sim*_*ker 7 python matlab save jupyter-notebook
在使用 Matlab 多年后,我刚刚开始使用 Python。我仍在学习所有差异。我正在使用 Jupyter Notebooks(这是必要的,因为它与其他使用它的人一起使用)
我无法理解的是保存变量,以便它们可以加载到另一个脚本中。我想运行一个处理一些数据的脚本,产生几个变量。然后我想将这些变量保存到文件中,并能够在另一个脚本中重新加载它们。
假设我的变量名称是“wbl”、“wbr”、“body_ang”
在 Matlab 中,这是微不足道的,例如:
save(filename,'wbl','wbr','body_ang')
Run Code Online (Sandbox Code Playgroud)
然后我可以使用以下命令加载变量:
load(filename)
Run Code Online (Sandbox Code Playgroud)
我在 Python 中找不到任何具有相同功能的东西。您可以使用例如 numpy.save 保存变量,但它不会保留变量名称。因此,除非您知道保存它们的顺序,否则无法重新创建它们。
我希望它们作为单独的变量,而不仅仅是作为数组的一部分(除非它们在加载后可以轻松地重新创建)。
这似乎是一件简单而明显的事情,但我不知道如何去做。
正如Epsi95所说,您可以在Python中使用该pickle模块,它将Python对象保存到文件中。
如果您想记录全局变量的值,请使用这些函数(它们的工作方式就像您在 Matlab 中给出的示例一样):
import pickle
def save(filename, *args):
# Get global dictionary
glob = globals()
d = {}
for v in args:
# Copy over desired values
d[v] = glob[v]
with open(filename, 'wb') as f:
# Put them in the file
pickle.dump(d, f)
def load(filename):
# Get global dictionary
glob = globals()
with open(filename, 'rb') as f:
for k, v in pickle.load(f).items():
# Set each global variable to the value from the file
glob[k] = v
Run Code Online (Sandbox Code Playgroud)
你可以用同样的方式称呼它们:
save(filename,'wbl','wbr','body_ang')
load(filename)
Run Code Online (Sandbox Code Playgroud)
这仅适用于全局变量,因此以下内容不起作用:
def foo():
u = 8
# "u" is not a global variable, so it can't be saved
# This will raise an Exception
save("bar", "u")
foo()
# Even if we did save "u", where do we put it now?
# The function isn't running, so we'd have it put it in globals
load("bar")
Run Code Online (Sandbox Code Playgroud)
不过,使用global关键字可以帮助您:
def foo():
global u = 8
# "u" is a global variable, so everything will work fine
save("bar", "u")
# Delete it if you don't want "u" to stick around after function
del u
foo()
# Put "u" back in globals
load("bar")
Run Code Online (Sandbox Code Playgroud)
如果您想保存除全局变量之外的其他变量,您将需要执行类似pickle字典的操作,将所有值映射到其中,并稍后检索整个字典。
编辑:修复了代码中的一些错误
| 归档时间: |
|
| 查看次数: |
4848 次 |
| 最近记录: |