我一直致力于在 python 中加载一些文件,然后在加载文件后,我想将它们导出到 .mat 文件中,然后在 MATLAB 中进行其余处理。我知道我可以这样做:
import scipy.io as sio
# load some files, assign loaded data to variables
# ...
sio.savemat(filename,mdict)
我在一定程度上理解这里发生的事情,并且看到它的语法如下:
alist = [5,3,6]
sio.savemat('small_list.mat',mdict={'alist':alist})
有人可以在 sio.savemat()
参数的第二部分中准确解释我在做什么吗,即 mdict = {'alist':alist}
?我可能只是对更 pythonic 的东西感到困惑(我对 python 比较陌生并且来自主要使用 C++ 的背景),但我对 mdict 术语在语法的哪些部分正在做什么感到困惑什么(引号部分是我在 MATLAB 中的变量名称,而未引号部分是我在 python 中的变量名称?)
此外,如果我想在一个 .mat
文件中保存(然后在 MATLAB 中加载)几个不同的变量,这会是什么样子?
最佳答案
根据文档,savemat
定义为
io.savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as='row')
因此第二个参数是必需的,并且可以提供或不提供 mdict=...
部分。
它希望这是一个字典的原因是它需要知道保存变量(数据)的名称。如果它接受一个变量,它就必须组成一个名字。在 Python 语法中,这两个表达式将相同的东西传递给 foo
。名称“alist”不会以任何方式传递给 foo
。
alist = np.arange(10)
foo('test.mat', alist)
foo('test.mat', np.arange(10))
loadmat
也返回一个字典,例如:
{'__version__': '1.0',
'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Mon May 25 09:19:36 2015',
'__globals__': [],
'alist': array([[1, 2, 3]])}
当我在 octave
中加载 text.mat
时,alist
变量出现在工作区中。
load
的函数形式产生一个结构
octave:5> r=load('test.mat')
r =
scalar structure containing the fields:
alist =
1 2 3
save
对应的octave
函数形式为
save ("-option1", ..., "file", "v1", ...)
其中 "v1"
是您要保存的变量的名称。
octave/MATLAB
从全局命名空间中提取这些变量的值。在 Python 中(更强烈地)不鼓励这种行为。
save('-7','test1.mat',"alist")
在 octave
中加载为
In [1256]: io.loadmat('test1.mat')
Out[1256]:
{'__version__': '1.0',
'__header__': b'MATLAB 5.0 MAT-file, written by Octave 3.8.1, 2015-05-25 17:02:15 UTC',
'__globals__': [],
'alist': array([[1, 2, 3]])}
除了标题内容,其他都是一样的。
关于python - 有人可以在 python (scipy.io) 中解释 mdict,例如在 scipy.io.savemat() 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440223/