J'ai d'énormes objets JSON contenant des listes 2D de coordonnées que je dois transformer en tableaux numpy pour le traitement.
Cependant, utiliser json.loads
suivi de np.array()
est trop lent.
Est-il possible d'augmenter la vitesse de création de tableaux numpy à partir de json?
import json
import numpy as np
json_input = '{"rings" : [[[-8081441.0, 5685214.0], [-8081446.0, 5685216.0], [-8081442.0, 5685219.0], [-8081440.0, 5685211.0], [-8081441.0, 5685214.0]]]}'
dict = json.loads(json_input)
numpy_2d_arrays = [np.array(ring) for ring in dict["rings"]]
Je prendrais n'importe quelle solution!
La réponse la plus simple serait simplement:
numpy_2d_arrays = np.array(dict["rings"])
Comme cela évite de boucler explicitement votre tableau en python, vous verriez probablement une accélération modeste. Si vous avez le contrôle sur la création de json_input
, il serait préférable d'écrire en tant que tableau série. Une version est ici .
Comme la syntaxe JSON est très proche de la syntaxe Python, je vous suggère d'utiliser ast.literal_eval
. C'est peut-être plus rapide…
import ast
import numpy as np
json_input = """{"rings" : [[[-8081441.0, 5685214.0],
[-8081446.0, 5685216.0],
[-8081442.0, 5685219.0],
[-8081440.0, 5685211.0],
[-8081441.0, 5685214.0]]]}"""
rings = ast.literal_eval(json_input)
numpy_2d_arrays = [np.array(ring) for ring in rings["rings"]]
Essaie. Et dis nous.
Pour ces données spécifiques, vous pouvez essayer ceci
import numpy as np
json_input = '{"rings" : [[(-8081441.0, 5685214.0), (-8081446.0, 5685216.0), (-8081442.0, 5685219.0), (-8081440.0, 5685211.0), (-8081441.0, 5685214.0)]]}'
i = json_input.find('[')
L = eval(json_input[i+1:-2])
print(np.array(L))