処理のためにnumpy配列に変換する必要がある座標の2Dリストを含む巨大なjsonオブジェクトがあります。
ただし、_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
の作成を制御できる場合は、シリアルとして書き出す方がよいでしょう配列。バージョンは here です。
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))