<p>我建议坚持使用<code>np.save</code>和{<cd2>},除非pickle有一些额外的功能需要。那么直接使用<code>pickle</code>而不是通过<code>np</code>同义词之一来使用<code>pickle</code>可能就不那么容易混淆了。在</p>
<p>==========</p>
<p>{{cd6>这是另一个未记录的名字。在</p>
<pre><code>In [573]: np.loads
Out[573]: <function _pickle.loads>
In [574]: np.loads??
Signature: np.loads(data, *, fix_imports=True, encoding='ASCII', errors='strict')
</code></pre>
<p><code>np.ma.loads</code>有更多的文档,但只是:</p>
^{pr2}$
<p><code>np.load</code>将使用<code>pickle</code>来处理那些不是常规数组的东西,但是它会从<code>np.save</code>格式执行自己的加载。看看它的文件是怎么说的腌制物品。更让人困惑。^数组的{<cd11>}使用<code>np.save</code>。也就是说,<code>ndarray</code>的pickle格式是<code>save</code>。在</p>
<p>所以<code>np.load</code>和{<cd5>}之间有关系,但与<code>pickle.load</code>和{<cd6>}之间的关系并不完全相同。在</p>
<p>==============</p>
<p>没有<code>np.dumps</code>,但有一个<code>np.ma.dumps</code></p>
<pre><code>In [584]: d=np.ma.dumps(foo)
In [585]: d
Out[585]: b'\x80\x03cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy\nndarray\nq\x01K\x00\x85q\x02C\x01bq\x03\x87q\x04Rq\x05(K\x01K\x03\x85q\x06cnumpy\ndtype\nq\x07X\x02\x00\x00\x00i4q\x08K\x00K\x01\x87q\tRq\n(K\x03X\x01\x00\x00\x00<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89C\x0c\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00q\rtq\x0eb.'
In [586]: np.loads(d)
Out[586]: array([1, 2, 3])
In [587]: np.ma.loads(d)
Out[587]: array([1, 2, 3])
In [588]: import pickle
In [589]: pickle.loads(d)
Out[589]: array([1, 2, 3])
</code></pre>
<p>使用pickle接口保存和加载数组:</p>
<pre><code>In [594]: np.ma.dump(foo,open('test.pkl','wb'))
In [595]: np.load('test.pkl')
Out[595]: array([1, 2, 3])
In [600]: pickle.load(open('test.pkl','rb'))
Out[600]: array([1, 2, 3])
</code></pre>