从MongoDB中读取pickle NumPy数组的子集

时间:2012-08-31 13:48:50

标签: python mongodb numpy

我有一些NumPy数组使用bson模块进行pickle并存储在MongoDB中。例如,如果x是NumPy数组,那么我将MongoDB记录的字段设置为:

bson.binary.Binary(x.dumps())

我的问题是,是否有可能恢复数组x的子集而无需通过np.loads()重新加载整个数组。那么,首先,我怎样才能让MongoDB只返回一大块二进制数组,然后我怎样才能将该块转换为NumPy数组。我在这里应该提一下,我已经拥有关于数组的所有NumPy元数据,例如它的维度和数据类型。

一个具体的例子可能是我有一个大小为({1}}的数据类型为np.float64的二维数组(100000,10),我只想检索x[50,10]

2 个答案:

答案 0 :(得分:0)

我不能肯定地说,但是检查BSON C ++的the api docs我知道它不是为部分检索而设计的......

如果你可以,可以考虑使用pytables,它是专为大数据设计的,并且与numpy很好地互操作。 Mongo非常适合某些分布式应用程序,而pytables则不然。

答案 1 :(得分:0)

如果将数组直接存储在MongoDB中,您还可以尝试使用$slice运算符来获取数组的连续子集。您可以将2D数组线性化为一维数组,$slice运算符将为您提供矩阵行,但如果您想选择列或通常选择不连续的数据,那么您就不幸了。

背景$slice