2011-03-02 169 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()