使用 scipy.io loadmat 将 Matlab 结构导入 python 时的值错误

Posted

技术标签:

【中文标题】使用 scipy.io loadmat 将 Matlab 结构导入 python 时的值错误【英文标题】:Wrong values when importing Matlab struct into python using scipy.io loadmat 【发布时间】:2020-01-23 10:51:21 【问题描述】:

我有一个包含 750x1 双结构的 Matlab 文件。所有单元格都包含数字“18”

我在 Python 中加载这个文件,使用:

loadmat(file_name, squeeze_me=True, struct_as_record=False)

令我惊讶的是,生成的 numpy.ndarray 中的所有单元格都包含数字“19”(dtype int)

我尝试设置mat_dtype=True,但唯一的区别是结果类型。导入的单元格仍然包含“19”而不是“18”。

有人知道为什么会发生这种汇总/增量吗?

【问题讨论】:

我不喜欢 matlab 和 python,但是看看这个:***.com/questions/874461/read-mat-files-in-python 有另一种加载文件的方法 对不起,这与我的问题无关。 你尝试用 numpy 还是 pandas 加载它? scipy.io.loadmat 加载 mat 文件并将结构转换为 numpy ndarray。 从 MATLAB struct 到 numpy 数组的映射可能会令人困惑(对象 dtype 数组的层等),但它不应更改元素的值。但是如果没有示例文件和/或一些代码,我们将无能为力。使用 MATLAB 代码,我也许可以生成带有 octave 的 .mat,然后尝试加载它。 【参考方案1】:

scipy 或 loadmat 没有任何问题,结果证明我是个白痴,没有注意到我为变量分配了不同的结构(结果是用 19s 填充)。

问题尴尬地解决了……

【讨论】:

以上是关于使用 scipy.io loadmat 将 Matlab 结构导入 python 时的值错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 scipy.io.loadmat 从 .mat Matlab 文件中将字典键转换为 Python 中具有相同值的变量名

Scipy IO Loadmat 错误:ValueError:Mat 4 mopt 格式错误

使用 scipy.io.loadmat 在 python 中加载 matlab 表

scipy.io.loadmat 嵌套结构(即字典)

SciPy中两个模块:io 和misc

在 python 中访问包含 matlab 类的 .mat 文件