2011-07-21 28 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