如何将python字典列表另存为matlab结构化数组的数组?

发布于 2021-01-29 16:43:44

我正在尝试创建一个要在Matlab环境中读取的文件。Matlab中的结构如下所示

trx(1) = 
          x: [1×1500 double]
          y: [1×1500 double]
          a: [1×1500 double]
          b: [1×1500 double]
      theta: [1×1500 double]
 firstframe: 1
   endframe: 1500
    nframes: 1500
        off: 0


 trx(2) = 
          x: [1×751 double]
          y: [1×751 double]
          a: [1×751 double]
          b: [1×751 double]
      theta: [1×751 double]
 firstframe: 750
   endframe: 1500
    nframes: 751
        off: -749

因此,很自然地我创建了一个带有必填字段的python字典并创建了一个列表,然后使用savemat。但是,当我在matlab中加载时,我只会得到单元格数组。我也尝试使用此方法, 但是问题是并非所有字段都是具有相同形状的数组,例如“
firstframe”是一个int。然后,当我使用fromarrays()但它抱怨,因为形状不匹配。

我现在正尝试将字典转换为结构化数组,但未找到任何相关内容。并且还尝试创建一个numpy记录,以允许数组使用不同的形状。任何光线都非常欢迎

关注者
0
被浏览
190
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在八度

    M =
    
      scalar structure containing the fields:
    
        x =
    
           1   2   3   4
    
        y =
    
           5   6   7   8
    
        one =  1
        two =
    
           1   2
    
    >> save -7 struct.mat M
    

    在Ipython中:

    In [450]: dat = io.loadmat('struct.mat')
    In [451]: dat
    Out[451]: 
    {'__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.2.2, 2019-02-08 18:49:49 UTC',
     '__version__': '1.0',
     '__globals__': [],
     'M': array([[(array([[1., 2., 3., 4.]]), array([[5., 6., 7., 8.]]), array([[1.]]), array([[1., 2.]]))]],
           dtype=[('x', 'O'), ('y', 'O'), ('one', 'O'), ('two', 'O')])}
    

    M是(1,1)结构化数组,所有字段均为objectdtype。这样,它们可以各自具有自己的形状。标量是(1,1)矩阵。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看