2

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
4

1 に答える 1

2

インストールした BSON のバージョンは、示されているようにインポートされないため、別のバージョンを使用している可能性があります。インポート後に python type help(bson) でドキュメントを表示するには...

このようなものが動作するはずです:

import bson
>>> a = numpy.random.rand(12).reshape((3,4))
>>> b = bson.dumps({'a':a.tolist()})
>>> print bson.loads(b)
{u'a': [[0.033390565943162254, 0.7282666963459123, 0.03719924011978737, 0.2664821209717694], [0.6145164300761253, 0.3662769247564551, 0.5973843055182299, 0.42908933503924207], [0.05901830243140804, 0.31533731904861184, 0.7158207045507905, 0.12686922689849378]]}
于 2012-09-04T23:49:24.580 に答える