web-dev-qa-db-ja.com

numpy配列をmongodbに保存しています

私のフィールドの1つがマトリックス(numpy配列)として最もよく表されているMongoDBドキュメントがいくつかあります。このドキュメントをMongoDBに保存したいのですが、どうすればよいですか?

{
'name' : 'subject1',
'image_name' : 'blah/foo.png',
'feature1' : np.array(...)
}
24
Dat Chu

1D numpy配列の場合、リストを使用できます。

# serialize 1D array x
record['feature1'] = x.tolist()

# deserialize 1D array x
x = np.fromiter( record['feature1'] )

多次元データの場合、pickleとpymongo.binary.Binaryを使用する必要があると思います。

# serialize 2D array y
record['feature2'] = pymongo.binary.Binary( pickle.dumps( y, protocol=2) ) )

# deserialize 2D array y
y = pickle.loads( record['feature2'] )
28
jeff7

コードpymongo.binary.Binary(...)は私には機能しませんでした。@ tcaswellが提案したように、bsonを使用する必要があるかもしれません。

とにかくここに多次元numpy配列の1つの解決策があります

>>from bson.binary import Binary
>>import pickle
# convert numpy array to Binary, store record in mongodb
>>record['feature2'] = Binary(pickle.dumps(npArray, protocol=2), subtype=128 )
# get record from mongodb, convert Binary to numpy array
>> npArray = pickle.loads(record['feature2'])

そうは言っても、クレジットは MongoWrapper 彼らによって書かれたコードを使用しました。

5
Somum

MongoDBに数値データ(Pandas、numpyなど)を格納するためのオープンソースライブラリを構築しました。

https://github.com/manahl/arctic

何よりも、それは本当に使いやすく、非常に高速で、データのバージョン管理、複数のデータライブラリなどをサポートしています。

4
James Blackburn

試してみましたか MongoWrapper 、簡単だと思います:

Npを保存するために、mongodbサーバーとコレクションへの接続を宣言します。

import monogowrapper as mdb
db = mdb.MongoWrapper(dbName='test',
                      collectionName='test_collection', 
                      hostname="localhost", 
                      port="27017") 
my_dict = {"name": "Important experiment", 
            "data":np.random.random((100,100))}

辞書はあなたが期待する通りです:

print my_dict
{'data': array([[ 0.773217,  0.517796,  0.209353, ...,  0.042116,  0.845194,
         0.733732],
       [ 0.281073,  0.182046,  0.453265, ...,  0.873993,  0.361292,
         0.551493],
       [ 0.678787,  0.650591,  0.370826, ...,  0.494303,  0.39029 ,
         0.521739],
       ..., 
       [ 0.854548,  0.075026,  0.498936, ...,  0.043457,  0.282203,
         0.359131],
       [ 0.099201,  0.211464,  0.739155, ...,  0.796278,  0.645168,
         0.975352],
       [ 0.94907 ,  0.363454,  0.912208, ...,  0.480943,  0.810243,
         0.217947]]),
 'name': 'Important experiment'}

データをmongoに保存します:

db.save(my_dict)

データをロードバックするには:

my_loaded_dict = db.load({"name":"Important experiment"})
2

モナリーを試しましたか?

彼らはサイトに例を持っています

http://djcinnovations.com/index.php/archives/1

2
vgoklani