python3에서 python2의 npy 파일을 읽는 방법

3099 단어 python3python2npy
python3에서python2로 포장된 npy 파일을 읽으면 오류가 발생합니다. 인코딩 방식이 다르기 때문에 읽을 때 인코딩 방식을 추가하면 됩니다.

해결 방법


docs_train = np.load('./data/20news_clean/train.txt.npy', allow_pickle=True, encoding='bytes')
docs_test = np.load('./data/20news_clean/test.txt.npy', allow_pickle=True, encoding='bytes')
경로의 파일은python2에서 압축한 것입니다.
추가: Python 3에서 Python 2를 로드합니다.npy 파일 오류
있어요.npy 파일은 Python 2.7.9와 Numpy 버전 1.11.3을 사용하여 명령을 통해 만든 np입니다.save('filename').이 파일들은 외부 컴퓨터에서 생성된 것으로 이 외부 컴퓨터는 우리 연구소의 linux 집단의 일부분이다.
np를 가져오기 위해 로컬 컴퓨터로 파일을 복사합니다.load('filename.npy').로컬 컴퓨터에서 Jupyter-Notebook이 있는 Python 3.5.2와 Numpy 버전 1.13.0을 실행하고 있습니다.
로컬 운영 체제는 Ubuntu 16.04.2입니다.

로컬에서 파일을 로드하려고 할 때 오류가 발생했습니다.


ValueError: invalid literal for int() with base 16
Stackoverflow 문제를 살펴본 후 다음 방법으로 인코딩을 지정합니다.

np.load('filename.npy',encoding='latin1')
이것은 같은 잘못을 보여 주었다.encoding='bytes'생산량:

TypeError: can't multiply sequence by non-int of type 'float'

이것은 Traceback의 큰 부분입니다.


/usr/local/lib/python3.5/dist-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
417       else:
418         return format.read_array(fid, allow_pickle=allow_pickle,
--> 419                     pickle_kwargs=pickle_kwargs)
420     else:
421       # Try a pickle

/usr/local/lib/python3.5/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
638       pickle_kwargs = {}
639     try:
--> 640       array = pickle.load(fp, **pickle_kwargs)
641     except UnicodeError as err:
642       if sys.version_info[0] >= 3:

/usr/local/lib/python3.5/dist-packages/sympy/core/numbers.py in __new__(cls, num, prec)
823         else:
824           _mpf_ = mpmath.mpf(
--> 825             S.NegativeOne**num[0]*num[1]*2**num[2])._mpf_
826     elif isinstance(num, Float):
827       _mpf_ = num._mpf_

TypeError: can't multiply sequence by non-int of type 'float'
Python과Numpy 버전 사이의 변환에 문제가 있을 것 같습니다.파일을 어떻게 가져오는지에 대한 어떤 생각입니까?

솔루션


에서 보듯이 *.npy에서 데이터의 저장 방식은 무엇입니까?npy 파일은 바이트 코드입니다. 16진 편집기에서 바이트 코드를 열면 이 파일을 볼 수 있습니다.
Python 2바이트.pyc,.pyo 파일은 가상 머신과 컴파일러 내부 버전이 주요 버전에 따라 변경되었기 때문에 Python 3에서 실행할 수 없습니다.
마찬가지로 NumPy의 C 내부 구조와 바이트 코드 컴파일러는 Python 3에서도 변화를 일으켜 뒤로 호환성을 파괴했다.바이트 코드가 그렇게 오래 지속되거나 만들어진 버전과 함께 사용할 수 없기 때문에 의도적인 것입니다.
이러한 변경의 구성은 Python 3의 바이트 해석기와 Python 3의 NumPy를 크게 변경하지 않거나 Python 2 NumPy 바이트에서 Python 3의 번역기로 전환하지 않으면 이 Python 2를 사용할 수 없다는 것을 의미한다.npy 파일.Python 3.
앞서 언급한 바와 같이 이것은 약간 X/Y 문제 같다.당신은 의존해서는 안 됩니다.npy 파일은 본질적으로 잃어버리기 쉬운 형식(예를 들어 Python VM 바이트)이기 때문에 각 버전에서 작동합니다.
바이트 코드를 역방향 프로젝트로 디버깅하는 것보다 이 파일을 생성하는 원본을 가져오는 것이 좋습니다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기