从Mongo获取dict并使用Numpy转换为ndarray

2024-05-14 14:40:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Mongo中有一个聚合查询,它返回的数据如下:

{a: 1, b: 2, c: 3}
{a: 4, b: 5, c: 6}
{a: 7, b: 8, c: 9}

我想对a、b和c执行FFT,我需要将数据放入3个numpy数组中,如下所示:

^{pr2}$

使用numpy做这个最好的选择是什么,因为现在我正在做一个for循环,这需要很长时间。在

更新:

mongo的结果是一个可编辑的游标 我现在的做法是这样的:

a = []
b = []
c = []
for item in aggregation_list:
    a.append(item['a'])
    b.append(item['b'])
    c.append(item['c'])

Tags: 数据infftnumpy编辑formongo数组
2条回答

假设您有来自MongoDB查询的字典列表,下面是如何根据数组的值构造数组:

dicts = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6} ,{'a': 7, 'b': 8, 'c': 9}]

您可以将不同的行解压成不同的变量,如下所示(尽管这需要事先了解字典的数量,并且只对少数字典有意义):

^{pr2}$

更好的方法是构建一个ndarray,每一行都包含来自上述字典值的交错值:

np.array(list(zip(*map(dict.values, dicts))))

array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

数据的格式似乎可以很容易地进入pandas,而从那里获得的pandas API速度更快,因为可以矢量化而不是循环。在

aggregation_list = [
    {a: 1, b: 2, c: 3}
    {a: 4, b: 5, c: 6}
    {a: 7, b: 8, c: 9}
]

df = pd.DataFrame.from_records(aggregation_list)

a = np.array(df['a'])
b = np.array(df['b'])
c = np.array(df['c'])

相关问题 更多 >

    热门问题