gpt4 book ai didi

python - IPython:如何自动加载 npz 文件并为变量赋值?

转载 作者:行者123 更新时间:2023-12-02 01:41:34 25 4
gpt4 key购买 nike

我是 Python 的新手,我急切地从 MATLAB 迁移到 IPython 作为我在实验室进行数据分析的首选语言。

在 MATLAB 中,经过一段时间的数据处理后,我会做

>>> save('myresults.mat','x','y','z');

并将变量 x、y 和 z 的结果保存在名为“myresults.mat”的文件中。后来,我可以简单地说:
>>> load('myresults');

MATLAB 将加载 .mat 文件并将变量的存储值分配给当前工作区。

我最近了解到我可以使用 numpy 为 IPython 做类似的事情,即:
import numpy as np
a = 2
b = np.sqrt(2)
np.savez('myresultsinpython',a,b)

然后做类似的事情
npzfile = np.load('myresultsinpython')

但是,我得到的是一个对象,我可以从中访问我的变量:
npzfile['arr_1']

等等,但我丢失了有关变量原始名称的所有信息。我知道我可以通过这样做来保存文件
np.savez('myresultsinpython',a=a,b=b)

但这不是那么有用,因为我仍然必须执行以下操作:
npzfile['a']

访问变量的值。

如何加载文件并在我的工作区中创建变量并根据文件中存储的值分配它们的值?

类似 np.load('myresults')并且能够做到 a+b并获得 3.4142135623730949 (=2+sqrt(2))作为返回。

最佳答案

locals().update(npzfile)
a # and/or b

在 Ipython session 中, locals()是一个包含您定义的变量、输入历史行和各种输出的大字典。 update添加 npzfile 的字典值到那个更大的。

顺便说一下,您还可以加载和保存 MATLAB .mat 文件。使用 scipy.io.loadmatsavemat .它处理 v4 (Level 1.0), v6 and v7 to 7.2文件。但是你有同样的问题——结果是一本字典。

Octave 有一种加载命令的表达形式,它将数据加载到一个结构中

S = 加载("file"、“选项”、“v1”、“v2”……)

一般情况 numpyipython没有与 MATLAB 相同的“保存工作区快照”的想法。我主要编写脚本来生成(和加载)必要的数据,并将它们作为独立的 python session 运行或在 ipython 中运行它们。 ipython 确实有一个很好的历史功能。您可能还会发现 ipython notebook 工具很有用。我没用过那个。

在函数内, locals()与外面不同。它是每个功能的“本地”。有一个 globals()可能允许在函数外设置变量的字典。但不鼓励这种编程风格。
Anurag的SO问题引用指向一个 save_ipython_variables包裹。 https://pypi.python.org/pypi/save_ipython_variables/0.0.3它使用 pickle 保存变量,并通过做类似的事情来加载它们
exec '__builtins__[name] = pickle.load(...)

使用 exec__builtins__它正在插入一些安全的编程边界。所以请谨慎使用。但是一个小测试在我的环境中确实有效。相同的技术可能适用于 npz文件。

关于python - IPython:如何自动加载 npz 文件并为变量赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28228324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com