JSON と Numpy を使用して配列、リスト、辞書を Python に格納することに慣れていますが、浮動小数点数は 4 バイトしか占有しないため、ファイルサイズを縮小するため、BSON を使用したいと考えています。
Json を使用して、次のことを行います。
import numpy
import json
a = numpy.random.rand(12).reshape((3,4))
with open('out.json', 'w') as out:
json.dump(a.tolist(), out)
with open('out.json') as inp:
b = numpy.array(json.load(inp))
print b
BSON で同じことを行う明確な方法が見つかりませんでした。私はこれを試しました:
import numpy
from bson import BSON
a = numpy.random.rand(12).reshape((3,4))
b = BSON.encode({'a': a.tolist()})
with open('out.bson', 'wb') as out:
out.write(b)
with open('out.bson', 'rb') as inp:
print BSON().decode(inp.read())
しかし、このエラーが発生します:
Traceback (most recent call last):
File "apaga.py", line 12, in <module>
print BSON().decode(inp.read())
File "/usr/lib/python2.7/dist-packages/bson/__init__.py", line 539, in decode
(document, _) = _bson_to_dict(self, as_class, tz_aware)
bson.errors.InvalidBSON: not enough data for a BSON document