Maison  >  Article  >  développement back-end  >  Comment sérialiser des tableaux NumPy dans Django pour la compatibilité JSON ?

Comment sérialiser des tableaux NumPy dans Django pour la compatibilité JSON ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 16:06:30612parcourir

How to Serialize NumPy Arrays in Django for JSON Compatibility?

Problème de sérialisation des tableaux NumPy avec Django

Lors de l'utilisation de tableaux NumPy dans des contextes Django, vous pouvez rencontrer une erreur indiquant que le tableau n'est pas JSON sérialisable. Cela se produit parce que les tableaux NumPy, par défaut, ne peuvent pas être directement représentés au format JSON.

Explication de la sérialisation

La sérialisation implique la conversion d'objets dans un format qui peut être transmis via un réseau ou stockés de manière persistante. JSON (JavaScript Object Notation) est un format de données populaire utilisé à ces deux fins. Cependant, les tableaux stockés dans la structure de données native de NumPy (qui s'aligne sur l'optimisation de la mémoire) sont incompatibles avec le format JSON.

Solution : Conversion en listes

Pour résoudre ce problème, vous pouvez convertir le tableau NumPy en une liste imbriquée à l'aide de la méthode .tolist(). Ce processus crée une structure de liste intrinsèquement compatible avec la sérialisation JSON.

Exemple de code

Voici un exemple de sérialisation et de désérialisation d'un tableau NumPy en Python :

<code class="python">import numpy as np
import codecs, json

# Create a 2D NumPy array
a = np.arange(10).reshape(2, 5)

# Convert the array to a list
b = a.tolist()

# Serialize the list using JSON
json.dump(b, codecs.open('path.json', 'w', encoding='utf-8'),
          separators=(',', ':'),
          sort_keys=True,
          indent=4)

# De-serialize the JSON back to a NumPy array
obj_text = codecs.open('path.json', 'r', encoding='utf-8').read()
b_new = json.loads(obj_text)
a_new = np.array(b_new)</code>

Ce processus convertit le tableau NumPy dans un format qui peut être transmis sur le réseau et ensuite reconstruit dans sa forme originale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn