python - 从 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'])
解决方案
假设你有一个来自 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]])
推荐阅读
- data-structures - 一元运算符后缀问题的中缀
- python - 我如何看到包“python-magic”应该作为“magic”导入?
- typescript - 打字稿:在课堂上无法识别
- aem - 如何在 AEM 中的自定义组件上使用子编辑器?
- ios - 尝试从我的 react native 应用程序打开 viber 应用程序。(iOS)
- python-3.7 - python类计算两个值的和和差
- python - Numpy - 创建序数类别嵌入
- php - Laravel - 将集合转换为简单数组
- powershell - 什么是 MSBUILD : Unknown switch 错误解决方案?
- python - Python Azure 函数性能