有人能用python(scipy.io)解释mdct吗,例如在scipy.io.savemat()中?

2024-04-26 02:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在用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}中所做的事情吗?我可能只是对一些更为python(我对Python比较新,并且来自C++的背景),但我很困惑MCDIt术语在语法的哪些部分做了什么(在MATLAB中引用了我的变量名,以及Python中的未引用的我的变量)。

另外,如果我想在一个.mat文件中保存(然后在MATLAB中加载)几个不同的变量,这会是什么样子?


Tags: 文件ioimportas语法loadsomefiles
1条回答
网友
1楼 · 发布于 2024-04-26 02:27:04

根据文档,savemat定义为

io.savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as='row')

因此,第二个参数是必需的,并且可以提供或不提供mdict=...部分。

它之所以希望这是一个字典,是因为它需要知道保存变量(数据)的名称。如果它接受一个变量,它就必须组成一个名称。在Python语法中,这两个expresion将相同的内容传递给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]])}

当我在octaveload text.mat时,工作区中会出现一个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")

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

除了页眉内容,它是一样的。

相关问题 更多 >