Tableau NumPy est pas la sérialisation JSON
Après la création d'un tableau NumPy, et l'enregistrer en tant que Django variable de contexte, je reçois l'erreur suivante lors du chargement de la page web:
array([ 0, 239, 479, 717, 952, 1192, 1432, 1667], dtype=int64) is not JSON serializable
Qu'est-ce que cela signifie?
Cela signifie que quelque part, quelque chose est en train d'essayer de vider un tableau numpy à l'aide de la
Note
une remarque à propos de @ashishsingal commentaire, il convient de your_array.tolist(), pas to_list().
json
module. Mais numpy.ndarray
n'est pas un type qui json
sait comment la gérer. Vous devrez écrire votre propre sérialiseur, ou (plus simplement) vient de passer list(your_array)
à ce qui est écrit au format json.Note
list(your_array)
ne fonctionne pas toujours comme il le renvoie numpy entiers, non pas des entiers. Utilisation your_array.to_list()
à la place.une remarque à propos de @ashishsingal commentaire, il convient de your_array.tolist(), pas to_list().
OriginalL'auteur Karnivaurus | 2014-10-30
Vous devez vous connecter pour publier un commentaire.
J'ai régulièrement des "jsonify" np.les tableaux de. Essayez d'utiliser le ".tolist ()", le moyen de tableaux premier, comme ceci:
Pour "unjsonify" le tableau utilisation:
Je ne sais pas, mais j'attends de np.tableau des types de métadonnées qui ne rentre pas dans le json (par exemple, spécifier le type de données de chaque entrée de type float)
J'ai essayé votre méthode, mais il semble que le programme coincé à
tolist()
.Vous ne savez pas comment vous aider pour l'info. S'il vous plaît essayer à fait sûr
a
est un tableau numpy. Puisa.tolist()
est juste la méthode qui le transforme dans une liste avec la même structure.J'ai trouvé la raison en est que
tolist()
prend une énorme quantité de données est importante.OriginalL'auteur travelingbones
Magasin de JSON un numpy.ndarray ou tout imbriqué liste de composition.
Sera de sortie:
De restaurer à partir de JSON:
Sera de sortie:
Est-il un moyen simple d'obtenir la ndarray de retour à partir de la liste ?
vous êtes à la recherche pour
numpy.asarray()
?Ce doit être la accepté de répondre, beaucoup plus propre façon de faire les choses.
C'EST la réponse. Excellent travail
OriginalL'auteur karlB
Vous pouvez utiliser Les Pandas:
pd.DataFrame(your_array).to_json('data.json', orient='split')
.Quelles sont les données? Vous devriez peut-être poster une question de votre propre?
OriginalL'auteur John Zwinck
J'ai trouvé la meilleure solution, si vous avez imbriqué des tableaux numpy dans un dictionnaire:
Grâce à ce mec.
Bien sûr, pour lire le
json
le dos, vous pouvez utiliser ceci:with open(path, 'r') as f:
data = json.load(f)
, qui retourne un dictionnaire avec vos données.C'est à la lecture de la
json
fichier, puis pour désérialiser elle est sortie, vous pouvez utiliser ceci:data = json.loads(data)
OriginalL'auteur tsveti_iko
Beaucoup d'autres numpy encodeurs semblent un peu trop verbeux.
vérifier si l'objet si le module numpy, si donc soit utiliser
ndarray.tolist
pour unndarray
ou de l'utilisation.item
pour toute autre numpy type spécifique.Utiliser le
json.dumps
default
kwarg:OriginalL'auteur moshevi
Ce n'est pas pris en charge par défaut, mais vous pouvez le faire fonctionner assez facilement! Il y a plusieurs choses que vous aurez envie de coder si vous voulez exactement les mêmes données:
obj.tolist()
@travelingbones mentionné. Parfois, cela peut être assez bon.En outre, votre tableau numpy pourrait le cadre de votre structure de données, par exemple, vous avez une liste avec des matrices à l'intérieur. Pour que vous pourriez utiliser un codeur qui fait de la ci-dessus.
Cela devrait être suffisant pour mettre en œuvre une solution. Ou vous pourriez utiliser json-astuces qui est précisément ce que fait (et prend en charge divers autres types) (avertissement: je l'ai fait).
Puis
OriginalL'auteur Mark
J'ai eu un problème similaire avec un imbriquée dictionnaire avec certains numpy.ndarrays.
OriginalL'auteur JLT
Vous pouvez également utiliser
default
argument par exemple:OriginalL'auteur steco
Aussi, de très intéressants renseignements supplémentaires sur les listes vs tableaux en Python ~> Liste Python vs. Tableau - quand les utiliser?
Il est à noter qu'une fois que j'convertir mes tableaux dans une liste avant de l'enregistrer dans un fichier JSON, dans mon déploiement droit maintenant de toute façon, j'ai lu une fois que le fichier JSON pour les utiliser plus tard, je peux continuer à l'utiliser dans une liste (par opposition à la conversion de celle-ci à un tableau).
ET en fait ressemble plus belle (à mon avis) sur l'écran sous forme de liste (séparés par des virgules) par rapport à un tableau (non-séparation par virgule) de cette façon.
À l'aide de @travelingbones .tolist() la méthode ci-dessus, j'ai été de les utiliser en tant que tel (à attraper quelques erreurs que j'ai trouvé trop):
ENREGISTRER DICTIONNAIRE
LIRE DICTIONNAIRE
Espérons que cette aide!
OriginalL'auteur ntk4
Ici est une mise en œuvre qui fonctionnent pour moi et supprimé tous les nans (en supposant que ce sont de simple objet (liste ou dict)):
OriginalL'auteur Roei Bahumi
C'est une réponse différente, mais cela peut vous aider à aider les gens qui essaient de sauvegarder les données et de les relire.
Il est hickle qui est plus rapide que pickle et plus facile.
J'ai essayé d'enregistrer et de lire dans la saumure dump mais à la lecture il y avait beaucoup de problèmes et de gaspillage d'une heure et n'a pas encore trouvé de solution même si j'ai eu à travailler sur mes propres données pour créer un chat bot.
vec_x
etvec_y
sont des tableaux numpy:Alors que vous venez de lire et effectuer les opérations:
OriginalL'auteur KS HARSHA
Peut faire simple boucle for avec la vérification de types:
OriginalL'auteur Robert GRZELKA
TypeError: array([[0.46872085, 0.67374235, 1.0218339 , 0.13210179, 0.5440686 , 0.9140083 , 0.58720225, 0.2199381 ]], dtype=float32) n'est pas JSON serializable
L'erreur ci-dessus a été jeté quand j'ai essayé de passer de la liste de données de modèle.predict() quand j'attendais la réponse au format json.
Mais heureusement trouvé l'astuce pour résoudre l'erreur a été de jeter
La sérialisation des objets est applicable seulement pour la conversion suivante
La cartographie doit être dans la façon suivante
objet - dict
tableau - liste
string - chaîne
entier - entier
Si vous faites défiler pour voir le numéro de la ligne 10
prédiction = loaded_model.prévoir(d) où cette ligne de code a été la génération de la sortie
de type array type de données , lorsque vous essayez de convertir le tableau en format json ce n'est pas possible
J'ai enfin trouvé la solution obtenue par conversion de sortie de la liste type par
lignes de code suivantes
Bhoom! a finalement obtenu les résultats attendus,

OriginalL'auteur Poornima Subramani Naidu