将JSON字符串解析为numpy数组的最快方法

2024-05-15 14:03:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的json对象,其中包含需要转换为numpy数组进行处理的二维坐标列表。

但是使用json.loadsnp.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"]]

我会采取任何解决办法!


Tags: 对象importnumpyjson列表inputnp数组
3条回答

由于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))

最简单的答案是:

numpy_2d_arrays = np.array(dict["rings"])

由于这避免了在python中显式地循环数组,您可能会看到一个适度的加速。如果您可以控制json_input的创建,那么最好以串行数组的形式写出来。版本是here

相关问题 更多 >