2017-06-24 15 views
0

numpyを使用する場合、my_ndarrayと呼ばれる、以前に作成された任意の、ndarrayがあるとします。私は、可能な場合は、次の操作を行うことができるようにしたい...前のndarray.tobytes()からndarrayに変換し直しますか?

my_bytes = my_ndarray.tobytes() 
new_ndarray = ## ... somehow convert `my_bytes` back to a `nympy.ndarray` 
## ... such that `my_ndarray` and `new_ndarray` are equal 
assert(numpy.equal(my_ndarray, new_ndarray)) # I expect this to succeed 

が有意義ndarraytobytes()バックを介して作成特にた何かをデシリアライズする方法はありますか?

他の形式のシリアライズ/デシリアライズを使用する必要がありますか?

答えて

3

あなたはnp.frombufferを使用することができます。

new_ndarray = np.frombuffer(my_bytes) 

デモ(python2):

>>> x = np.random.randn(10) 
>>> my_bytes = x.tobytes() 
>>> my_bytes 
b'\x8d\x10\xfe\x1e\xaa^\xa0\xbfw\xa26\xca\xbc\xb1\xf5\xbf\x06(C\xe4\x9d\xb9\xae?\xed9\x170rZ\xe9?\x1c\x99\xd5TQ\xbe\xc5\xbfk\xd42\xb3(\xbb\xf3\xbf\xc7K.L\x1fu\xe5\xbfHE\xc2H~\xca\xdd\xbf\xe79\xdfJ\xeec\xf7\xbf\xe3\x9ds\x88\xbe\x1c\xf4\xbf' 
>>> np.frombuffer(my_bytes) 
array([-0.03197223, -1.35589293, 0.06000989, 0.79229078, -0.16987054, 
     -1.23319311, -0.67054715, -0.46548421, -1.46189718, -1.25701764]) 
+0

あなたが返さDTYPEを認識しておく必要があり、frombufferはデフォルトでフロートを使用するため、これが一致するように変更する必要がありますオリジナルの配列はエンコードされています。それ以外の場合は、同じ結果が得られません。 –

関連する問題