我有一些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]
。
答案 0 :(得分:0)
我不能肯定地说,但是检查BSON C ++的the api docs我知道它不是为部分检索而设计的......
如果你可以,可以考虑使用pytables,它是专为大数据设计的,并且与numpy很好地互操作。 Mongo非常适合某些分布式应用程序,而pytables则不然。
答案 1 :(得分:0)
如果将数组直接存储在MongoDB中,您还可以尝试使用$slice
运算符来获取数组的连续子集。您可以将2D数组线性化为一维数组,$slice
运算符将为您提供矩阵行,但如果您想选择列或通常选择不连续的数据,那么您就不幸了。
背景$slice
。