我试图使用Python,就像在Matlab中使用Python一样。基本上,我已经运行了一些Python代码,它生成了一些全局变量。比如说,a=5b=3
我想将这些保存到一个.mat文件,该文件将由Matlab操作。目标是能够在Matlab中看到全局变量,就像在Matlab中保存到.mat文件时一样。
我见过一些示例,其中使用savemat保存字典/数组,但不用于保存全局变量。
我怎样才能这样做?这难道是枕木做不到的事吗?
谢谢。
发布于 2015-09-29 19:27:12
您很可能不想保存全局文件,但是要保存局部变量(尽管变量是解释器的本地变量)。您可以通过locals()和globals()函数访问和更新它们。
在这里,您可以使用您喜欢的存储方法,如泡菜、元帅、json或其他,这取决于您想要的安全级别以及您手头的对象类型。但是,要小心,因为它们也会报告函数和一些内部变量,因此可能会给这些函数带来一些麻烦。
但是,如果您打算(如Matlab)只是通过GUI加载和存储变量,您可能需要检查Spyder IDE (GitHub项目)。它是一个非常好的IDE,面向科学的使用,非常相似(在外观上)Matlab的旧接口。最重要的是,它提供了一个名为“变量资源管理器”的选项卡/窗格,它跟踪您想要存储的内容,并具有"Save data as.“和"Import ”按钮和"Save .“按钮。对话框支持保存到间谍数据文件(.spydata)、Matlab文件(.mat)和HDF5 (*.h5)。
如果您想通过编程完成此操作,您可以检查Spyder是如何做到的。
发布于 2015-09-29 15:41:38
保存所有全局变量的问题是保存所有全局变量。
您将在全局命名空间中保存诸如导入模块和其他所有内容之类的内容。其中许多事情不能转换成matlab所能处理的格式。例如,如何将模块scipy.io保存到.mat文件中?它也是一个全局变量!
前面已经说过,您可以通过调用globals()来检索全局变量的数据集,并通过调用locals()来检索局部变量。
在少数情况下,您可以直接将其传递给scipy.io.savemat。通常,您需要将其过滤到要保存的变量。
尽管如此,在某些情况下,scipy.io.savemat('filename.mat', locals())可能是有意义的。更好的方法是明确您正在保存的内容,但是在某些情况下,可以方便地转储所有局部变量。
例如:
import numpy as np
import scipy.io
def main():
x = np.arange(100)
y = np.random.random((10, 10))
scipy.io.savemat('test.mat', locals())
main()发布于 2015-09-29 18:49:04
在Python中,我可以按名称保存变量、整数和数组:
In [112]: io.savemat('test.mat',{'i':i,'m':m,'rule':rule})
In [113]: io.loadmat('test.mat')
Out[113]:
{'__version__': '1.0',
'i': array([[2]]),
'__globals__': [],
'rule': array([[ 1., 1., ... 1., 1.]]),
'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Tue Sep 29 11:44:23 2015',
'm': array([[100]])}让他们参加一个八度课程
octave:5> load '../test.mat'
octave:6> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
i 1x1 4 int32
m 1x1 4 int32
rule 1x100 800 double
Total is 102 elements using 808 bytes当我对io.savemat('test.mat', locals())做同样的尝试时,我会得到一个错误,说明保存class定义是不可能的。Python环境(globals)包含与MATLAB/Octave会话不兼容的所有东西,比如类、函数、模块。在跨语言工作时,您希望集中注意兼容的变量。
https://stackoverflow.com/questions/32847510
复制相似问题