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

时间:2016-12-09 21:10:46

标签: python json numpy cython

我有大量的json对象,其中包含我需要转换为numpy数组进行处理的2D坐标列表。

然而,使用跟随json.loads的{​​{1}}太慢了。

有没有办法提高json创建numpy数组的速度?

np.array()

我会采取任何解决方案!

3 个答案:

答案 0 :(得分:3)

最简单的答案就是:

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

由于这可以避免在python中显式循环遍历数组,因此您可能会看到适度的加速。如果您可以控制json_input的创建,那么最好将其写为串行数组。版本为here

答案 1 :(得分: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"]]

试一试。并告诉我们。

答案 2 :(得分:1)

对于此特定数据,您可以尝试此

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