有人可以在python(scipy.io)中解释mdict,例如在scipy.io.savemat()中吗?

时间:2015-05-25 14:06:28

标签: python matlab io scipy

我一直在加载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中加载)一些不同的变量,这会是什么样子?

1 个答案:

答案 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.matoctave时,工作区中会出现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

除标题内容外,它是相同的。