2017-12-04 15 views
0

myndarray.tobytes()を使用してnumpyのndarrayをバイトに変換できます。どうすればndarrayに戻すことができますか? .tobytes()メソッドのドキュメントからの例を使用してnumpyのndarrayをバイトで作るにはどうしたらいいですか?

>>> x = np.array([[0, 1], [2, 3]]) 
>>> bytes = x.tobytes() 
>>> bytes 
b'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00' 

>>> np.some_magic_function_here(bytes) 
array([[0, 1], [2, 3]]) 
+3

[np.frombuffer()?](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.frombuffer.html) – sascha

+1

または['np.fromstring']( https://docs.scipy.org/doc/numpy/reference/generated/numpy.fromstring.html#numpy.fromstring)。どちらの場合も 'dtype'をデフォルト(' float')でない場合に指定する必要があります。 –

答えて

1

あなたの編集した後、それはあなたが間違った方向に行っているようです!

あなたはこれらのバイトからの復興にのみ必要とされるときの形状や種類などのすべての情報を含む完全な配列を格納するためにnp.tobytes()を使用することはできません!生のデータ(セル値)のみを保存し、CまたはFortranオーダーでこれらを平坦化します。

あなたの仕事は分かりません。しかし、のシリアル化に基づいて何かが必要になります。アプローチのトンがありますが、最も簡単には(ここでは例!:のpython3):Pythonのピクルスに基づいて次のされている

import pickle 
import numpy as np 

x = np.array([[0, 1], [2, 3]]) 
print(x) 

x_as_bytes = pickle.dumps(x) 
print(x_as_bytes) 
print(type(x_as_bytes)) 

y = pickle.loads(x_as_bytes) 
print(y) 

出力:

[[0 1] 
[2 3]] 
b'\x80\x03cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy\nndarray\nq\x01K\x00\x85q\x02C\x01bq\x03\x87q\x04Rq\x05(K\x01K\x02K\x02\x86q\x06cnumpy\ndtype\nq\x07X\x02\x00\x00\x00i8q\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 \x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00q\rtq\x0eb.' 
<class 'bytes'> 
[[0 1] 
[2 3]] 

より良い代替がために特殊酸洗とjoblib'sピクルスだろう大きなアレイ。 joblibの関数はファイルオブジェクトベースで、PythonのBytesIOを使ってバイト列でもメモリ内で使用できます。

関連する問題