2 votes

Récupérer un dict de Mongo et le convertir en tableau ndarray en utilisant Numpy

J'ai une requête agrégée dans Mongo qui renvoie des données comme :

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

Je voudrais faire une FFT pour a, b et c et j'ai besoin de mettre les données dans 3 tableaux numpy comme ceci :

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

Quelle est la meilleure option pour faire cela en utilisant numpy car pour l'instant je fais une boucle for et cela prend du temps.

UPDATE :

Le résultat de Mongo est un curseur qui est itérable. La façon dont je le fais maintenant est la suivante :

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

2voto

yatu Points 39897

En supposant que vous disposiez d'une liste de dictionnaires à partir de la requête MongoDB, voici comment vous pouvez construire un tableau à partir de ses valeurs :

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

Vous pourriez décomposer les différentes lignes en différentes variables comme suit (bien que cela nécessite une connaissance préalable de la quantité de dictionnaires, et n'a de sens que pour quelques dictionnaires) :

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

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

Une meilleure approche serait de construire un ndarray, dont chaque ligne contiendrait les valeurs entrelacées des valeurs des dictionnaires ci-dessus :

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

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

1voto

Erik K Points 422

Il semble que les données arrivent dans un format qui pourrait facilement être introduit dans Pandas et, à partir de là, l'API Pandas est beaucoup plus rapide parce que vous pouvez vectoriser au lieu de boucler.

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'])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X