序列化一个包含numpy数组的元组

4

我有一些numpy矩阵(确切地说是三维的),它们存储在元组中。

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

我想将每个元组序列化为一个文件,以便在另一台机器上(Linux => Windows,两者都是x86-64)读回Python。 有什么Pythonic的方法可以实现这一点吗?

4个回答

6

numpy.savez或numpy.savez_compressed是一个不错的选择。我听说过,但从未经历过某些类型的数组无法很好地进行pickling。

我回想起这篇文章(似乎并不是什么大问题),以及关于numpy.void 无法pickling的一些内容。可能不是问题,但就在那里。


1
我想补充一点,np.savez 似乎也能很好地实现类似于 scipy.io.savemat 的功能。savemat 的好处在于它可以很好地操作 MATLAB 的 .mat 文件。 - Dat Chu

1

我通常使用 cPickle ,尽管我还没有与其他方法进行正式比较。此外,我总是将文件写为二进制并使用最高协议设置:

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

1

那个链接说Scipy.io在空间和时间上都有最佳性能,是吗? - Dat Chu
是的 - 如果那些不是考虑因素,使用pickle可能会更加方便。 - dfb

1
使用 shelve, pickle, cPickleshove。每个库都可以让你将大多数 Python 对象存储在文件中;shoveshelve 专注于类似字典的对象,它们将键映射到值,而 shove 则可以让你使用各种类似数据库的后端。如果你发现这些库的性能限制超出了你的需求,考虑使用数据库路线,例如通过 SQLAlchemy
我已经使用过这些库,并且它们在自己的领域内工作得相当不错。我建议从标准库中的 pickleshelve 开始。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接