2016-12-09 2 views
2

처리를 위해 numpy 배열로 변환해야하는 좌표의 2D 목록이 포함 된 거대한 json 객체가 있습니다.JSON 문자열을 numpy 배열로 구문 분석하는 가장 빠른 방법

그러나 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"]] 

나는 모든 해결책을 취할 것입니다!

+0

은 내가'json' 디코더 오류가 발생하고있어 기대 값 : 행 1 열 (14) (CHAR (13))' – hpaulj

+0

@ hpaulj 맞습니다. 고정되어 있습니다 –

+0

비표준 JSON 인'()'이었습니다 – hpaulj

답변

2

가장 간단한 대답은 다음과 같습니다이로

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

명시 적으로 당신은 아마 완만 한 속도 향상을 볼 것입니다 파이썬에서 배열을 통해 반복 피한다. json_input 작성을 제어 할 수 있다면 직렬 어레이로 작성하는 것이 좋습니다. 버전은 here입니다.

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

JSON 이후 구문은 정말 파이썬 구문에 가까운 시도 할 수 있었다, 나는 당신이 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"]] 

시도해보십시오. 그리고 우리에게 말해줘. `파일 "/usr/lib/python3.5, ... json.decoder.JSONDecodeError :

+0

감사합니다.하지만 ast.literal_eval은 내 데이터가있는 json.loads()보다 느립니다. –