【问题标题】:Serialize a tuple of numpy arrays序列化一个 numpy 数组的元组
【发布时间】:2011-03-02 00:26:15
【问题描述】:

我有几个存储在元组中的 numpy 矩阵(准确地说是 3 维)

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

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

【问题讨论】:

    标签: python serialization numpy scipy


    【解决方案1】:

    numpy.savez 或 numpy.savez_compressed 是要走的路。我听说过,但从未遇到过某些类型的数组酸洗不好的问题。

    我想起了 this 的帖子(似乎不是什么大问题)以及关于 numpy.void not pickling 的一些内容。可能不是问题,但确实存在。

    【讨论】:

    • 我还想补充一点,np.savez 似乎与 scipy.io.savemat 一样好。 savemat 的好处是它可以很好地处理 MATLAB .mat 文件。
    【解决方案2】:

    泡菜可能会很好用

    我也看到了这个:http://thsant.blogspot.com/2007/11/saving-numpy-arrays-which-is-fastest.html

    【讨论】:

    • 那个链接说 Scipy.io 在空间和时间上都提供了最好的性能,不是吗?
    • 是的 - 如果不考虑这些,泡菜可能不会那么麻烦。
    【解决方案3】:

    使用shelvepicklecPickleshove。这些中的每一个都可以让您将大多数类型的 python 对象存储在一个文件中; shoveshelve 专注于将键映射到值的类字典对象,shove 将允许您使用各种类似数据库的后端。如果您发现自己超出了这些库的性能限制,请考虑走数据库路线,例如通过SQLAlchemy

    我已经使用了这些库中的每一个,并且它们在各自的领域中运行得相当好。我将从标准库pickleshelve 开始。

    【讨论】:

      【解决方案4】:

      我一般使用cPickle,虽然我没有和其他方法做正式的比较。此外,我总是将文件编写为二进制文件并使用最高协议设置:

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

      【讨论】:

        猜你喜欢
        • 2015-04-14
        • 1970-01-01
        • 2014-06-28
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 2019-08-12
        • 1970-01-01
        • 2018-06-26
        相关资源
        最近更新 更多