用PICKLE模块在Python中打开Matlab文件.mat

1 投票
3 回答
4200 浏览
提问于 2025-04-16 22:00

我想在Python语言中打开一个Matlab项目,使用PicklecPickle模块。不是用:

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

我可以用pickle.load来加载一个.mat文件吗?

3 个回答

2

你不能这样做。Pickle 是用来加载那些已经被转换成二进制数据的 Python 对象的。这个格式和 Matlab 的文件格式完全不一样。

如果你已经从 Matlab 文件中读取了所有需要的数据,并把它们存储在 Python 对象里,那么你可以在必要的时候用 Pickle 把这些对象保存起来,以便以后使用。

2

这件事是做不到的。关于pickle的内容可以参考Python文档

pickle模块实现了一种基本但强大的算法,用于将Python对象结构进行“序列化”和“反序列化”。“Pickling”就是把一个Python对象的层级结构转换成一串字节流的过程,而“unpickling”则是把这串字节流再转换回对象层级结构的过程。Pickling(和unpickling)也可以叫“序列化”、“编组”或者“扁平化”,不过为了避免混淆,这里我们就用“pickling”和“unpickling”这两个词。

在你的情况下,你可以用scipy.io加载*.mat对象,然后把它序列化成你定义的某种Python结构。到那时,你就可以很方便地进行pickling和unpickling了。(不过这最后一步要看具体情况,有时候做这个也不一定划算)。

4

这些年来,Matlab一直使用HDF5来存储数据。Python也支持HDF5,可以通过PyTables来使用。这样就不需要用到Pickle了。实际上,HDF5的速度可能会让你感到惊讶,相比于Pickle,它的读写速度更快。一位朋友报告说,对于一些非常大的数据集,HDF5的读写速度提升了2到10倍。


更新1:关于如何通过HDF5加载文件的简明指南,可以在这个页面找到。

此外,还有一些不错的参考资料和资源,可以在这个页面找到。还有一个在Sourceforge上的PyMat项目

撰写回答