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

我一直在努力用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]])}

当我以八度加载text.mat时,工作空间中会出现一个alist变量.

负载的功能形式产生结构

octave:5> r=load('test.mat')
r =
  scalar structure containing the fields:
    alist =
      1  2  3

保存的相应八度功能形式为

save ("-option1", ..., "file", "v1", ...)

其中“ v1”是要保存的变量的名称.

octave / MATLAB从全局名称空间中提取这些变量的值.在Python中(更强烈地)不鼓励这种操作.

save('-7','test1.mat',"alist")

倍频程加载为

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]])}

除了标题内容,其他内容相同.

上一篇:scikit dict vectorizer中按功能名称提取功能


下一篇:使用mathml将sympy方程输出到单词