2016-07-11 6 views
3

다음 데이터를 파이썬 2로 작성했습니다. 파이썬 3 파일에로드하고 싶습니다.numpy.load를 사용하는 데 문제가 있습니다.

import numpy as np 
x = np.array([{'a': np.array([1., 2., 3])}]) 
np.save('data.npy', x) 

내 첫 번째 시도이 있었다 : 나는로드하려고 원본 데이터와 장난 후

import numpy as np 
x = np.load('data.npy') 

UnicodeError: Unpickling a python object failed 

을, 그것은 보인다 나는 파이썬 내부 NumPy와 배열의 내부 NumPy와 플로트있을 때마다 사전, 오류가 발생합니다. 나는 사전을로드 할 수 있습니다, 나는 numpy 배열을로드 할 수 있습니다, 심지어는 파이썬 사전 안에 numpy 배열을로드 할 수 있지만 numpy 배열 안에 파이썬 사전 안에 numpy float가 생기 자마자 오류가 발생합니다. 내 두 번째 시도했다이 :

이 내가 데이터를로드 할 수 있지만이 사전에있는 모든 키의 앞에 'B'를 추가 한에서 일
import numpy as np 
x = np.load('data.npy', encoding = 'bytes') 
x 

array([{b'a': array([ 1., 2., 3.])}], dtype=object) 

. 누군가가이 문제가 발생하는 이유와 해결 방법에 대한 통찰력이 있는지 궁금합니다.

감사합니다.

편집 :

다음 문제 해결 것 같다

:

import numpy as np 
x = np.load('data.npy', encoding = 'latin1') 
+1

b는 실제로 키의 일부가 아닙니다. 문자열이 바이트 문자열임을 나타냅니다. 따라서 b'a '는 문자 a를 나타내는 1 바이트의 문자열입니다. 이것은 유니 코드 문자열과 유사합니다. 적어도 파이썬 2.x에서는'u'a '처럼 보입니다. – bigblind

+1

거기에 덧글 (내가 삭제 된 것 같아요?) 시도 인코딩 = '대신'인코딩 '='바이트 '. 인코딩 = 'str'은 유효하지 않지만 인코딩 = 'latin1'이 작동하는 것처럼 보입니다. – Zhaitan

답변

5

파이썬 2의 기본 인코딩이 ascii입니다; 파이썬 3에서는 utf-8입니다. latin1 (a.k.a., ISO-8859-1)은 ascii의 수퍼 세트입니다. 그렇기 때문에 ascii 인코딩 된 문자열을 latin1으로로드하고 ascii으로로드하는 것과 같은 결과를 얻는 것입니다.

+1

인코딩의 기본값은 'ASCII'이며 첫 번째 시도에서 시도했습니다. 그러나 인코딩을 'latin1'로 설정하면 – Zhaitan

+0

'latin1'은'ascii'의 확장입니다 - 편집을 참조하십시오. –

관련 문제