我有幾個numpy的矩陣(3維是精確的),其被存儲在元組的元組序列化numpy的陣列
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
我想每個元組序列化到可以讀取一個文件在另一臺機器上回到Python(Linux => Windows,都是x86-64)。什麼是pythonic方式來完成這個?
我有幾個numpy的矩陣(3維是精確的),其被存儲在元組的元組序列化numpy的陣列
(a1,b1,c1)
(a2,b2,c2)
...
(an,bn,cn)
我想每個元組序列化到可以讀取一個文件在另一臺機器上回到Python(Linux => Windows,都是x86-64)。什麼是pythonic方式來完成這個?
numpy.savez或numpy.savez_compressed是要走的路。我聽說過,但從來沒有遇到過某些類型的陣列沒有很好的酸洗的問題。
我記得this後(似乎沒有太大的問題)以及一些關於numpy.void not pickling。可能不是一個問題,但它是。
味酸可能會工作得很好
我也看到了這一點:http://thsant.blogspot.com/2007/11/saving-numpy-arrays-which-is-fastest.html
這種聯繫說Scipy.io提供了最好的性能空間和時間,不是嗎? – 2011-03-02 00:35:49
是的 - 如果這些不是一個考慮因素,泡菜可能不會那麼麻煩。 – dfb 2011-03-02 00:46:09
鏈接已損壞。 – 2013-07-31 08:28:58
使用shelve
,pickle
,cPickle
,或shove
。這些中的每一個都可以讓您將大多數python對象存儲在一個文件中; shove
和shelve
專注於將鍵映射到值的字典式對象,並且shove
將允許您使用各種類似數據庫的後端。如果發現自己超出了這些庫的性能限制,請考慮使用數據庫路由,例如通過SQLAlchemy。
我已經使用了這些庫中的每一個,並且它們在自己的利基中工作得很好。我會從pickle
或shelve
開始,這是標準庫。
我一般使用cPickle
,雖然我還沒有做過與其他方法的正式比較。此外,我總是寫的文件作爲二進制和使用最高協議設置:
f = open('fname.pkl','wb')
cPickle.dump(array_tuple,f,-1)
f.close()
我還想補充一點,np.savez似乎對scipy.io.savemat也有類似的效果。關於savemat的好處是,它假設可以很好地運行MATLAB .mat文件。 – 2011-03-02 05:59:46