1

我正在尝试创建一个要在 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 记录。任何光都非常受欢迎

4

1 回答 1

2

在八度

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) 矩阵。

于 2019-02-08T18:51:51.753 回答