2016-11-10 11 views
0

ウィットに:`np.save()` d配列を `np.loads()`する方法は?

>>> foo = np.array([1, 2, 3]) 
>>> np.save('zomg.npy', foo) 
>>> np.load('zomg.npy') 
array([1, 2, 3]) 

すべて良いです。 loadsはどうですか?

>>> np.loads(open('zomg.npy', 'rb').read()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
_pickle.UnpicklingError: STACK_GLOBAL requires str 

いいえ。これは動作しませんか? np.load()は成功するので、私は、データが破損していない知っている:

答えて

1

のいくつかの追加機能がある場合を除き、私はnp.savenp.loadにこだわっお勧めしたいですあなたが必要とするピクルス。それで、npの同義語の1つで、pickleを直接使用するのではなく、混乱を避けることができます。

============

文書化されていないnp.loadsがあります。 pickle.loadsの別の名前です。

In [573]: np.loads 
Out[573]: <function _pickle.loads> 
In [574]: np.loads?? 
Signature: np.loads(data, *, fix_imports=True, encoding='ASCII', errors='strict') 

np.ma.loadsより多くのドキュメントを持っていますが、ちょうどである:

def loads(strg): 
    ... 
    return pickle.loads(strg) 

np.loadは通常の配列でないもののためにpickleを使用しますが、np.save形式から独自のロードを実行します。ピクルスオブジェクトについては、そのドキュメントの内容を参照してください。混乱を招く。アレイのpickle.dumpnp.saveを使用します。つまり、ndarrayのピクルス・フォーマットはsaveです。

そうそこnp.loadnp.loadsの関係はあるが、それはpickle.loadpickle.loads間のと全く同じではありません。

================

np.dumpsありませんが、そこにあるnp.ma.dumps

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]) 

保存するためにピクルスインターフェイスを使用し、アレイをロードしてください:

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]) 
0

これは今のところ回避策として動作します。

>>> np.load(io.BytesIO(open('zomg.npy', 'rb').read())) 
array([1, 2, 3]) 
関連する問題