我一直在努力用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]])}
除了标题内容,其他内容相同.