Dat*_*Chu 22 python numpy mongodb nosql
我有几个MongoDB文档,其中一个我的字段最好表示为矩阵(numpy数组).我想将此文档保存到MongoDB,我该怎么做?
{
'name' : 'subject1',
'image_name' : 'blah/foo.png',
'feature1' : np.array(...)
}
Run Code Online (Sandbox Code Playgroud)
jef*_*ff7 26
对于1D numpy数组,您可以使用列表:
# serialize 1D array x
record['feature1'] = x.tolist()
# deserialize 1D array x
x = np.fromiter( record['feature1'] )
Run Code Online (Sandbox Code Playgroud)
对于多维数据,我相信你需要使用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'] )
Run Code Online (Sandbox Code Playgroud)
代码pymongo.binary.Binary(...)对我不起作用,可能是我们需要使用@tcaswell建议的bson。
无论如何,这里是多维numpy数组的一种解决方案
>>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'])
Run Code Online (Sandbox Code Playgroud)
话虽这么说,但归功于MongoWrapper使用了他们编写的代码。
我们已经构建了一个开源库,用于在 MongoDB 中存储数字数据(Pandas、numpy 等):
https://github.com/manahl/arctic
最重要的是,它非常易于使用,速度非常快,并且支持数据版本控制、多个数据库等。
| 归档时间: |
|
| 查看次数: |
14321 次 |
| 最近记录: |