Python scipy.io.loadmat错误读取MATLAB(R2016a)结构
scipy.io.loadmat不是将MATLAB结构作为dict加载(如和其他相关问题中所述),而是将其作为奇怪的ndarray加载,其中值是数组数组的数组,字段名被视为数据类型。最简单的例子: (MATLAB): (Python):Python scipy.io.loadmat错误读取MATLAB(R2016a)结构,python,matlab,Python,Matlab,scipy.io.loadmat不是将MATLAB结构作为dict加载(如和其他相关问题中所述),而是将其作为奇怪的ndarray加载,其中值是数组数组的数组,字段名被视为数据类型。最简单的例子: (MATLAB): (Python): 这个问题在Python 2和3中仍然存在。这是预期的行为。Numpy只是向您展示了MATLAB正在将数据存储在引擎盖下 MATLAB结构是2+D单元数组,其中一维映射到字符串序列。在Numpy中,相同的数据结构称为“记录数组”,数据类型用于存储名称。由于MATL
这个问题在Python 2和3中仍然存在。这是预期的行为。Numpy只是向您展示了MATLAB正在将数据存储在引擎盖下 MATLAB结构是2+D单元数组,其中一维映射到字符串序列。在Numpy中,相同的数据结构称为“记录数组”,数据类型用于存储名称。由于MATLAB矩阵必须至少是二维的,所以存储在MATLAB中的
0
实际上是一个二维矩阵,其尺寸(1,1)
因此,您在
scipy.io.loadmat
中看到的是MATLAB如何存储数据(减去数据类型位,MATLAB没有这样的功能)。具体来说,它是一个二维[1,1]
数组(Numpy称之为单元数组),其中一个维度映射到一个字符串,其中包含一个[1,1]
二维数组。MATLAB对您隐藏了其中的一些细节,但numpy没有。您是否确实阅读了上面使用的文档链接中的?看起来这都是预期的行为。。。。它接着描述了如何使用square\u me
和struct\u作为记录参数。不够接近!谢谢我猜从这个问题到现在,structs_as_record默认为True。
>> a = struct('b',0)
a =
b: 0
>> save('simple_struct.mat','a')
In[1]:
import scipy.io as sio
matfile = sio.loadmat('simple_struct.mat')
a = matfile['a']
a
Out[1]:
array([[([[0]],)]],
dtype=[('b', 'O')])