numpy.array () 데이터를 올바르게 저장하고로드하는 방법은 무엇입니까?
numpy.array
데이터를 제대로 저장하고로드하는 방법이 궁금합니다 . 현재 나는 numpy.savetxt()
방법을 사용하고 있습니다. 예를 들어, markers
다음과 같은 배열 이있는 경우 :
다음을 사용하여 저장하려고합니다.
numpy.savetxt('markers.txt', markers)
다른 스크립트에서 이전에 저장 한 파일을 열려고합니다.
markers = np.fromfile("markers.txt")
그리고 그것이 내가 얻는 것입니다 ...
저장된 데이터는 먼저 다음과 같습니다.
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
그러나 동일한 방법을 사용하여 방금로드 된 데이터를 저장할 때, 즉. numpy.savetxt()
다음과 같이 보입니다.
1.398043286095131769e-76
1.398043286095288860e-76
1.396426376485745879e-76
1.398043286055061908e-76
1.398043286095288860e-76
1.182950697433698368e-76
1.398043275797188953e-76
1.398043286095288860e-76
1.210894289234927752e-99
1.398040649781712473e-76
내가 도대체 뭘 잘못하고있는 겁니까? 추신 : 내가 수행하는 다른 "무대"작업이 없습니다. 저장하고 불러 오기만하면됩니다. 미리 감사드립니다.
The most reliable way I have found to do this is to use np.savetxt
with np.loadtxt
and not np.fromfile
which is better suited to binary files written with tofile
. The np.fromfile
and np.tofile
methods write and read binary files whereas np.savetxt
writes a text file. So, for example:
In [1]: a = np.array([1, 2, 3, 4])
In [2]: np.savetxt('test1.txt', a, fmt='%d')
In [3]: b = np.loadtxt('test1.txt', dtype=int)
In [4]: a == b
Out[4]: array([ True, True, True, True], dtype=bool)
Or:
In [5]: a.tofile('test2.dat')
In [6]: c = np.fromfile('test2.dat', dtype=int)
In [7]: c == a
Out[7]: array([ True, True, True, True], dtype=bool)
I use the former method even if it is slower and creates bigger files (sometimes): the binary format can be platform dependent (for example, the file format depends on the endianness of your system).
There is a platform independent format for NumPy arrays, which can be saved and read with np.save
and np.load
:
In [8]: np.save('test3.npy', a) # .npy extension is added if not given
In [9]: d = np.load('test3.npy')
In [10]: a == d
Out[10]: array([ True, True, True, True], dtype=bool)
np.save('data.npy', num_arr) # save
new_num_arr = np.load('data.npy') # load
np.fromfile()
has a sep=
keyword argument:
Separator between items if file is a text file. Empty (“”) separator means the file should be treated as binary. Spaces (” ”) in the separator match zero or more whitespace characters. A separator consisting only of spaces must match at least one whitespace.
The default value of sep=""
means that np.fromfile()
tries to read it as a binary file rather than a space-separated text file, so you get nonsense values back. If you use np.fromfile('markers.txt', sep=" ")
you will get the result you are looking for.
However, as others have pointed out, np.loadtxt()
is the preferred way to convert text files to numpy arrays, and unless the file needs to be human-readable it is usually better to use binary formats instead (e.g. np.load()
/np.save()
).
참고 URL : https://stackoverflow.com/questions/28439701/how-to-save-and-load-numpy-array-data-properly
'Programing' 카테고리의 다른 글
Apache / Django / WSGI 잘못된 요청 (400) 오류 디버깅 (0) | 2020.12.01 |
---|---|
큰 github 저장소를 푸시하면 "unable to push to unqualified destination : master"로 실패합니다. (0) | 2020.12.01 |
Laravel eloquent 모델로 3 개의 테이블을 결합하는 방법 (0) | 2020.12.01 |
iPhone UIWebview : 숫자 키보드를 강제하는 방법? (0) | 2020.12.01 |
Jmeter 대안 (0) | 2020.12.01 |