<p>我不知道您为什么在pickle <code>numpy</code>数组或矩阵对象时遇到问题。他们应该泡菜。这里我用<code>dill</code>来腌制它们。在</p>
<pre><code>>>> import dill
>>> n = numpy.array([[1,2,3],[4,5,6]])
>>> m = numpy.matrix(n)
>>> m
matrix([[1, 2, 3],
[4, 5, 6]])
>>> dill.dumps(n)
'\x80\x02cdill.dill\n_create_array\nq\x00(cnumpy.core.multiarray\n_reconstruct\nq\x01cnumpy\nndarray\nq\x02K\x00\x85q\x03U\x01bq\x04\x87q\x05(K\x01K\x02K\x03\x86q\x06cnumpy\ndtype\nq\x07U\x02i8q\x08K\x00K\x01\x87q\tRq\n(K\x03U\x01<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89U0\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00q\rtq\x0eNtq\x0fRq\x10.'
>>> dill.dumps(m)
'\x80\x02cdill.dill\n_create_array\nq\x00(cnumpy.core.multiarray\n_reconstruct\nq\x01cnumpy.matrixlib.defmatrix\nmatrix\nq\x02K\x00\x85q\x03U\x01bq\x04\x87q\x05(K\x01K\x02K\x03\x86q\x06cnumpy\ndtype\nq\x07U\x02i8q\x08K\x00K\x01\x87q\tRq\n(K\x03U\x01<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89U0\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00q\rtq\x0e}q\x0fU\x08_getitemq\x10\x89stq\x11Rq\x12.'
</code></pre>
<p>首选的方法是使用<code>dump</code>方法,该方法与<code>numpy</code>对象一起提供。从上面的pickle可以看出,这实际上就是<code>dill</code>在做什么,但只是在开头添加了一些小东西(基本上,它还序列化了函数来取消数组的拾取)。在</p>
^{pr2}$
<p>因此,如果<code>pickle</code>本身不能直接作用于<code>numpy</code>对象,那么可以使用<code>dill</code>,或者可以对<code>numpy</code>对象本身使用<code>dump</code>/<code>dumps</code>方法。在</p>