scipy.io.loadmat不是将MATLAB结构加载为dict(如http://docs.scipy.org/doc/scipy/reference/tutorial/io.html和其他相关问题中所述),而是将其作为奇怪的ndarray加载,其中值是数组的数组,并且字段名称被视为dtype。最小的例子:
(MATLAB):
>> a = struct('b',0)
a =
b: 0
>> save('simple_struct.mat','a')
(Python)的:
In[1]:
import scipy.io as sio
matfile = sio.loadmat('simple_struct.mat')
a = matfile['a']
a
Out[1]:
array([[([[0]],)]],
dtype=[('b', 'O')])
Python 2和3中仍存在此问题。
答案 0 :(得分:0)
这是预期的行为。 Numpy只是向您展示MATLAB正在将您的数据存储在引擎盖下。
MATLAB结构是2 + D单元阵列,其中一个维度映射到字符串序列。在Numpy中,这个相同的数据结构称为“记录数组”,dtype用于存储名称。由于MATLAB矩阵必须至少为2D,因此存储在MATLAB中的0
实际上是一个维度为(1, 1)
的二维矩阵。
所以你在scipy.io.loadmat
看到的是MATLAB如何存储你的数据(减去dtype位,MATLAB没有这样的东西)。具体来说,它是一个2D [1, 1]
数组(这是Numpy调用的单元数组),其中一个维度映射到一个字符串,包含一个[1, 1]
2D数组。 MATLAB隐藏了一些这些细节,但numpy没有。