Programing

numpy.array () 데이터를 올바르게 저장하고로드하는 방법은 무엇입니까?

lottogame 2020. 12. 1. 07:32
반응형

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

반응형