2011-07-21 30 views
1

模块PICKLE打开Matlab的文件.MAT我想开一家Matlab的项目与模块泡椒的cPicklePython语言。 不:可以用Python

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

我可以用pickle.load有.MAT文件?

+3

简短的回答:你不能,他们是完全不同的格式,继续使用SciPy ... – Amro

+1

你为什么要这么做?正如其他人已经提到的那样:由于格式不同,无法完成。 – Egon

+0

听起来像试图用错误的钥匙打开锁,并抱怨门没有打开。不同的数据类型需要不同的库或程序来打开它们,这就是生活。 – Michael

回答

2

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

如果您已经从matlab文件中读取了需要的所有数据并将其存储在Python对象中,则可以通过在需要时进行酸洗来存储它以备后用。

2

这是不可能的。从泡菜python documentation

咸菜模块实现了 序列化和反序列化Python对象结构的根本,但强大的算法。 “酸洗” 是将Python对象层次结构转换为 字节流的过程,“取消”是相反的操作,由此将字流转换回对象层次结构。酸洗(或取消) 或者称为“序列化”,“编组”,或者“变平”,但是,为了避免混淆,这里使用的术语 是“酸洗”和“取消”。

在你的情况下,你可以加载* .mat对象与scipy.io,然后序列化它在你可能定义的一些python结构。在那一刻,你将能够轻松地腌泡和取下它。 (但最后一步取决于,在某些使用情况下不值得做)。

4

几年来,Matlab已经使用HDF5来存储数据。 Python支持HDF5,通过PyTables。不需要使用泡菜。事实上,HDF5相对于Pickle的速度可能让你感到惊讶。一位朋友报告说,对于一些非常大的数据集,读/写速度提高2-10倍。


更新1:简明指南加载文件,经由HDF5,可以发现at this page

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