2011-06-26 22 views
14

ここで、base64データからnumpy配列をどのように回復できるかを調べようとしています。この質問と回答はそれが可能であることを示唆しています:Reading numpy arrays outside of Pythonしかし例は示されていません。Numpy Arrayをbase64に戻してNumpy Arrayに戻す - Python

例として、以下のコードを使用して、dtypeと配列の形状を知っていれば、base64データからNumpy配列を取得できますか?

qを、dtype float64のnumpy配列として設定すると、結果はtと同じ配列になります。これは、配列がコード化するもので、次のようになり、デコード:

>>> t = np.arange(25,dtype=np.float64) 
>>> t 
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 
    11., 12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 
    22., 23., 24.]) 
>>> s=base64.b64encode(t) 
>>> s 
'AAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAQQAAAAAAAABRAAAAAAAAAGEAAAAAAAAAcQAAAAAAAACBAAAAAAAAAIkAAAAAAAAAkQAAAAAAAACZAAAAAAAAAKEAAAAAAAAAqQAAAAAAAACxAAAAAAAAALkAAAAAAAAAwQAAAAAAAADFAAAAAAAAAMkAAAAAAAAAzQAAAAAAAADRAAAAAAAAANUAAAAAAAAA2QAAAAAAAADdAAAAAAAAAOEA=' 
>>> r = base64.decodestring(s) 
>>> r 
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\x00\x[email protected]\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\x00 @\x00\x00\x00\x00\x00\x00"@\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\x00&@\x00\x00\x00\x00\x00\x00(@\x00\x00\x00\x00\x00\x00*@\x00\x00\x00\x00\x00\x00,@\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]\x00\x00\x00\x00\x00\[email protected]' 
>>> q = np.array(???? 

私はパワードアプリでMySQLデータベースにnumpyのアレイの多くを保存したいプロジェクトに取り組んでいますので、私は求めていた理由がありますdjangoによって。このジャンゴを使用

私はテキストフィールドにBASE64データを格納することができるスニペット:http://djangosnippets.org/snippets/1669/

Iの代わりにUnicode文字の文字列に配列を変換するBASE64としてデータベースに配列を書き込みたいです。

ありがとうございました。

答えて

20
import base64 
import numpy as np 

t = np.arange(25, dtype=np.float64) 
s = base64.b64encode(t) 
r = base64.decodestring(s) 
q = np.frombuffer(r, dtype=np.float64) 

print(np.allclose(q, t)) 
# True 
+0

ありがとうございました。 – sequoia

+2

また、q = np.reshape(q、(m、n))を適用して多次元配列に対してこの作業を行ったことを追加します。ここでmとnはt配列の元の寸法です。 – sequoia

+0

多次元配列の処理が私を守りませんでした - b64encodeは多次元配列の結果を返していましたが、それらの配列には "内側"配列... scaryが含まれていませんでした。素晴らしい指針をありがとう! –

関連する問題