2011-03-02 173 views
3

我有幾個numpy的矩陣(3維是精確的),其被存儲在元組的元組序列化numpy的陣列

(a1,b1,c1) 
(a2,b2,c2) 
... 
(an,bn,cn) 

我想每個元組序列化到可以讀取一個文件在另一臺機器上回到Python(Linux => Windows,都是x86-64)。什麼是pythonic方式來完成這個?

回答

6

numpy.savez或numpy.savez_compressed是要走的路。我聽說過,但從來沒有遇到過某些類型的陣列沒有很好的酸洗的問題。

我記得this後(似乎沒有太大的問題)以及一些關於numpy.void not pickling。可能不是一個問題,但它是。

+1

我還想補充一點,np.savez似乎對scipy.io.savemat也有類似的效果。關於savemat的好處是,它假設可以很好地運行MATLAB .mat文件。 – 2011-03-02 05:59:46

1

使用shelvepicklecPickle,或shove。這些中的每一個都可以讓您將大多數python對象存儲在一個文件中; shoveshelve專注於將鍵映射到值的字典式對象,並且shove將允許您使用各種類似數據庫的後端。如果發現自己超出了這些庫的性能限制,請考慮使用數據庫路由,例如通過SQLAlchemy

我已經使用了這些庫中的每一個,並且它們在自己的利基中工作得很好。我會從pickleshelve開始,這是標準庫。

1

我一般使用cPickle,雖然我還沒有做過與其他方法的正式比較。此外,我總是寫的文件作爲二進制和使用最高協議設置:

f = open('fname.pkl','wb') 
cPickle.dump(array_tuple,f,-1) 
f.close()