Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.io.loadmat错误读取MATLAB(R2016a)结构_Python_Matlab - Fatal编程技术网

Python scipy.io.loadmat错误读取MATLAB(R2016a)结构

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

scipy.io.loadmat不是将MATLAB结构作为dict加载(如和其他相关问题中所述),而是将其作为奇怪的ndarray加载,其中值是数组数组的数组,字段名被视为数据类型。最简单的例子:

(MATLAB):

(Python):


这个问题在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')])