【问题标题】:Open Matlab file .mat with module PICKLE in Python在 Python 中使用模块 PICKLE 打开 Matlab 文件 .mat
【发布时间】:2013-07-24 17:25:15
【问题描述】:

我想打开一个 Matlab 项目,其中包含 PicklecPickle 模块(Python 语言)。 不与:

from scipy.io import matlab
mat=matlab.loadmat('file.mat')

我可以将pickle.load 与 .mat 文件一起使用吗?

【问题讨论】:

  • 简短回答:你不能,它们是完全不同的格式,继续使用 SciPy...
  • 您为什么要这样做?正如其他人已经提到的那样:由于格式不同,因此无法完成。
  • 听起来像是用错误的钥匙开锁,抱怨门打不开。不同的数据类型需要不同的库或程序来打开它们,这就是生命。

标签: python matlab pickle


【解决方案1】:

多年来,Matlab 一直使用 HDF5 来存储数据。 Python 通过PyTables 支持 HDF5。无需使用泡菜。事实上,HDF5 相对于 Pickle 的速度可能会让您大吃一惊。一位朋友报告说,对于一些非常大的数据集,读/写速度提高了 2-10 倍。


更新 1:通过 HDF5 加载文件的简明指南可以在 at this page 找到。

此外,at this page 还可以找到一些很好的参考资料和资源。还有一个PyMat project on Sourceforge

【讨论】:

    【解决方案2】:

    你不能。 Pickle 加载已序列化为二进制数据的 Python 对象。该格式与 Matlab 文件格式完全不同。

    如果您已从 matlab 文件中读取所需的所有数据并将其存储在 Python 对象中,则可以在必要时通过 Pickling 将其存储以供日后使用。

    【讨论】:

      【解决方案3】:

      这是不可能的。来自泡菜python documentation

      pickle 模块实现了一个基本但强大的算法 序列化和反序列化 Python 对象结构。 “腌制” 是将 Python 对象层次结构转换为 字节流,而“unpickling”是逆操作,其中一个字节 流被转换回对象层次结构。酸洗(和 unpickling) 也称为“序列化”、“编组”、 1 或“扁平化”,但为避免混淆,此处使用的术语 是“酸洗”和“解酸”。

      在您的情况下,您可以使用 scipy.io 加载 *.mat 对象,然后将其序列化为您可以定义的某些 python 结构。那时,您将能够轻松地腌制和解开它。 (但最后一步取决于,在某些用例中不值得这样做)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-21
        • 2018-12-18
        • 1970-01-01
        • 2011-04-29
        • 2014-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多