我一直在加载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中加载)一些不同的变量,这会是什么样子?
答案 0 :(得分:4)
根据文档,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]])}
当我在load text.mat
中octave
时,工作区中会出现alist
变量。
load
的功能形式产生structure
octave:5> r=load('test.mat')
r =
scalar structure containing the fields:
alist =
1 2 3
octave
的相应save
功能形式是
save ("-option1", ..., "file", "v1", ...)
其中"v1"
是您要保存的变量的名称。
octave/MATLAB
从全局命名空间中提取这些变量的值。在Python中,这种行为(更强烈地)是不鼓励的。
save('-7','test1.mat',"alist")
<{1>}中的加载为
octave
除标题内容外,它是相同的。