首页 > 解决方案 > 从 Mongo 获取 dict 并使用 Numpy 转换为 ndarray

问题描述

我在 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 数组中,如下所示:

a = np.array([1, 4, 7])
b = np.array([2, 5, 8])
c = np.array([3, 6, 9])

使用 numpy 执行此操作的最佳选择是什么,因为现在我正在执行 for 循环,这需要很长时间。

更新:

mongo 的结果是一个可迭代的 Cursor 我现在这样做的方式是这样的:

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

标签: pythonarraysmongodbnumpy

解决方案


假设你有一个来自 MongoDB 查询的字典列表,下面是你如何从它的值构造一个数组:

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

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

a,b,c = np.array(list(zip(*map(dict.values, dicts))))

print(a)
# [1 4 7]
...

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

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

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

推荐阅读