我在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的结果是一个可迭代的游标 我现在的操作方式是这样的:
a = []
b = []
c = []
for item in aggregation_list:
a.append(item['a'])
b.append(item['b'])
c.append(item['c'])
答案 0 :(得分:2)
假设您有来自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]])
答案 1 :(得分:1)
似乎数据以一种可以轻松进入大熊猫的格式提供,并且从那里开始,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'])