[英]Fastest way to parse JSON strings into numpy arrays
我有巨大的json对象包含我需要转换成numpy数组进行处理的2D坐标列表。
但是使用json.loads
后跟np.array()
太慢了。
有没有办法提高json创建numpy数组的速度?
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"]]
我会采取任何解决方案!
最简单的答案就是:
numpy_2d_arrays = np.array(dict["rings"])
由于这可以避免在python中显式循环遍历数组,因此您可能会看到适度的加速。 如果您可以控制json_input
的创建, json_input
最好将其写为串行数组。 一个版本在这里 。
由于JSON语法非常接近Python语法,我建议您使用ast.literal_eval
。 它可能更快......
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"]]
试试看。 并告诉我们。
对于此特定数据,您可以尝试这样做
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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.