Programming/Python

numpy의 array를 저장하고 읽어보자

매직블럭 2019. 8. 8. 11:02

numpy를 사용하다 보면 array의 값을 파일로 저장해야 할 경우가 생긴다.

이럴경우 따로 파일 IO를 사용하기보다 numpy의 기본 기능을 이용하면 간단하게 저장하고 읽을 수 있다.

저장 할 경우 array의 차원 등의 정보도 같이 저장되기 때문에 별다른 추가 처리를 할 필요가 없다.

 

(이하 import numpy as np 는 기본으로 포함)

1. *npy 파일로 저장하기

    npy 파일 포멧은 하나의 numpy array를 저장하기 위한 포멧이다.

    

    $ x = np.array([0, 1, 2, 3, 4, 5])

    $ np.save("./save/data.npy", x)

 

2. *.npz 파일로 저장하기 

    npz 파일 포멧은 여러개의 리스트를 한번에 저장하기 위한 포멧이다.

    이 경우는 압축 여부에 따라 두 가지 함수가 사용된다.

 

    $ y = np.array([0, 1, 2])

    $ z = np.array([3, 4, 5])

 

    # 압축하지 않고 저장하기

    $ np.savez("./save/without_compression_data.npz", y=y, z=z)

    # 압축하고 저장하기

    $ np.save_compressed("./save/compression_data.npz", y=y, z=z)

 

3. 텍스트 파일로 저장하기

    array 값을 바로 확인 가능한 텍스트 파일로 저장하기 위함이다.

    텍스트 파일로 저장 할 경우 파일의 시작과 끝에 header, footer 옵션으로 주석을 달 수 있으며

    array의 값을 표현할 포멧팅도 지정 가능하다

 

    $ x = np.array([0, 1, 2, 3, 4, 5])

    $ np.savetxt("./save/data.txt", x, header="write start", footer="write end", fmt=".1f")

 

4. 저장 된 np array 불러오기

    텍스트 데이터를 제외한 나머지 경우는 np.load를 이용하여 읽을 수 있고 텍스트 데이터는 np.loadtxt를 사용한다.

 

    $ x = np.load("./save/data.npy")

    # 여러 array가 있는 경우 저장한 이름을 index로 사용

    $ saved_npz = np.load("./save/without_compression_data.npz")

    $ saved_npz = np.load("./save/compression_data.npz")

    $ y = saved_npz ['y']

    $ z = saved_npz ['z']

 

    $ x = loadtxt('"./save/data.txt")

 

5. load 한 np array 파일 닫기

    load 한 array 데이터는 사용이 끝나면 close()를 이용하여 파일을 닫아 준다

    또는 with 문을 이용하는 것도 방법.

 

    $ saved_npz.close()