我有几个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