用PICKLE模块在Python中打开Matlab文件.mat
我想在Python语言中打开一个Matlab项目,使用Pickle或cPickle模块。不是用:
from scipy.io import matlab
mat=matlab.loadmat('file.mat')
我可以用pickle.load
来加载一个.mat文件吗?
3 个回答
你不能这样做。Pickle
是用来加载那些已经被转换成二进制数据的 Python 对象的。这个格式和 Matlab 的文件格式完全不一样。
如果你已经从 Matlab 文件中读取了所有需要的数据,并把它们存储在 Python 对象里,那么你可以在必要的时候用 Pickle 把这些对象保存起来,以便以后使用。
这件事是做不到的。关于pickle的内容可以参考Python文档
pickle模块实现了一种基本但强大的算法,用于将Python对象结构进行“序列化”和“反序列化”。“Pickling”就是把一个Python对象的层级结构转换成一串字节流的过程,而“unpickling”则是把这串字节流再转换回对象层级结构的过程。Pickling(和unpickling)也可以叫“序列化”、“编组”或者“扁平化”,不过为了避免混淆,这里我们就用“pickling”和“unpickling”这两个词。
在你的情况下,你可以用scipy.io加载*.mat对象,然后把它序列化成你定义的某种Python结构。到那时,你就可以很方便地进行pickling和unpickling了。(不过这最后一步要看具体情况,有时候做这个也不一定划算)。
这些年来,Matlab一直使用HDF5来存储数据。Python也支持HDF5,可以通过PyTables
来使用。这样就不需要用到Pickle了。实际上,HDF5的速度可能会让你感到惊讶,相比于Pickle,它的读写速度更快。一位朋友报告说,对于一些非常大的数据集,HDF5的读写速度提升了2到10倍。
更新1:关于如何通过HDF5加载文件的简明指南,可以在这个页面找到。
此外,还有一些不错的参考资料和资源,可以在这个页面找到。还有一个在Sourceforge上的PyMat项目。