【问题标题】:Loading Matlab Structure in Python在 Python 中加载 Matlab 结构
【发布时间】:2019-05-23 13:03:56
【问题描述】:

我有一堆从 matlab R2018b 9.5 版生成的 Matlab 结构。该结构包含 3 个字段:

  1. 双倍大小的矩阵:6942x6092
  2. 双倍大小的矩阵:6942x1
  3. 单元格大小矩阵:1x6092(单元格内容为字符串)

我想找到一种方法来加载这个结构并访问 python 3.7 中的三个不同元素。我尝试了很多方法,但我从未设法加载结构并能够访问结构的 3 个元素。在matlab中重现结构:

struct.values = ones(6942,6092);
struct.dates = ones(6942,1);
struct.id = cell(1,6092);
struct.id(:) = {'x1'};
save('struct','struct');

然后将其保存为 .mat 文件。

【问题讨论】:

  • 您是在问如何在 python 中加载 .mat 文件吗?请参阅 h5pythis answer
  • 不幸的是,答案在这种情况下确实有效。我收到错误:“无法打开文件(未找到文件签名)”。我可以加载简单的矩阵,但如果你仔细阅读我的问题,我说的是 matlab 结构。所以是的,它是一个 .mat 文件,但包含一个结构。

标签: python matlab type-conversion structure compatibility


【解决方案1】:

Dev-iL 基本上是对的,您可以使用 scipy.io.loadmat 加载结构,而不仅仅是矩阵。见这里:

import scipy.io as sio
container = sio.loadmat('struct.mat')
values = container['struct']['values'][0,0]

【讨论】:

  • 如果不清楚,我使用 v7.3 格式保存我的 .mat 文件。考虑到这一点,您上面的代码返回以下错误:“请使用 HDF reader for matlab v7.3 files”
  • 您是否尝试过这里的解决方案:stackoverflow.com/questions/17316880/…
  • 是的,但我收到以下错误:“无法打开文件(未找到文件签名)”
  • 我又看了看,用 f = h5py.File('struct.mat') 读取数据并没有复制你的错误,我不知道你为什么会得到它。但是,我只能获取字段名称,似乎不支持结构。使用 matlab.engine 报告了一些成功,这意味着您使用 python 调用 Matlab。这当然需要 Matlab。
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2017-02-21
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多