我是Python的新手,我渴望从MATLAB迁移到IPython,作为我在实验室进行数据分析的首选语言
在MATLAB中,经过一段时间的数据处理,我会
>>> save('myresults.mat','x','y','z');
并将变量x、y和z的结果保存在一个名为'我的结果.mat'. 后来,我可以简单地说:
^{pr2}$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
并得到{
在Ipython会话中,
locals()
是一个大字典,包含您定义的变量、输入历史行和各种输出。update
将npzfile
的字典值加到较大的字典值上。在顺便说一下,您还可以加载和保存MATLAB.mat文件。使用}。它处理
scipy.io.loadmat
和{v4 (Level 1.0), v6 and v7 to 7.2
文件。但你有同样的问题-结果就是一本字典。在Octave具有load命令的表达式形式,用于将数据加载到结构中
S=加载(“文件”,“选项”,“v1”,“v2”,…)
一般来说,}并不像MATLAB那样有“保存工作区快照”的想法。或者在python中单独运行脚本,或者在需要的情况下从python中加载并运行脚本。ipython有一个很好的历史特性。您可能还发现ipython笔记本工具很有用。我没用过。在
numpy
和{在一个函数中,
locals()
与它外部不同。它对每个函数都是“局部”的。有一个globals()
字典,它可能允许在函数之外设置变量。但这种编程风格并不受鼓励。在
^{pr2}$Anurag
引用的SO问题指向一个save_ipython_variables
包。https://pypi.python.org/pypi/save_ipython_variables/0.0.3它用pickle
保存变量,并通过执行如下操作加载它们使用
exec
和__builtins__
它正在推动一些安全的编程边界。所以要小心使用。但在我的环境中,一个小测试确实有效。相同的技术可能适用于npz
文件。在我一遍又一遍地寻找同样的东西,厌倦了每次都要加载几十个数组:
由于我让计算定期在校园集群上运行,并在我的笔记本电脑上对结果(numpy数组)进行后处理,我真的很欣赏免费的Spyder IDE(顺便说一句,它以交互方式运行一个IPython控制台),它有一个类似Matlab GUI的变量资源管理器,可以让你加载整个npz档案(或者如果你愿意的话可以选择变量)或spydata用鼠标点击存档。它大大加快了我使用numpy数组的工作流程。在
相关问题 更多 >
编程相关推荐