300x250

 

 

목차

     

     

     

    Numpy 라이브러리를 사용하여 array를 다룰 때, 해당 array를 저장하거나 저장된 array를 불러와야 하는 경우가 있다. 이와 관련하여 npy, npz 확장자의 파일이 무엇인지, 자주 활용하는 함수는 무엇인지 알아보자.

     

     

     

     

    .npy, .npz 파일이란?

     

    '.npy' 확장자, '.npz' 확장자를 갖는 파일은 Numpy 라이브러리에서 읽고 쓸 수 있는 바이너리 파일이다.

    npy파일은 1개의 ndarray, npz는 여러 개의 ndarray를 저장한다.

     

     

     

     

    유용한 함수 및 예제

     

    numpy array(ndarray)를 읽고 쓰는 것과 관련된 함수는 다음과 같다.

    • save(file_path, numpy_arr, …) : numpy_arr를 .npy 포맷으로 file_path에 저장
    • savez(file_path, args, *kwds) : args와 kwgs에 여러 배열을 입력하여 .npz포맷으로 file_path에 저장
    • savez_compressed(file_path, args, *kwds) : savez와 동일하지만, 데이터를 압축
    • load(file_path, …) : .npy 파일 혹은 .npz 파일을 읽어옴
    • close() : 불러온 ndarray 파일 object를 메모리에서 지움

     

    예시와 함께 알아보자.

     

    Save and Load

    먼저 npy 파일, 즉 ndarray 하나를 저장하고 불러올 때의 예시이다.

    import numpy as np
    
    x = np.array([0, 1, 2, 3, 4, 5])
    
    # save to example.npy file
    np.save('/root/dev/example', x)
    
    # load
    loaded_npy = np.load('/root/dev/example.npy')
    print(loaded_npy)

     

    Fig 1. npy save and load result

     

    다음으로 mpz 파일, 즉 여러 개의 ndarray를 저장하고 불러올 때의 예시이다.

    import numpy as np
    
    x = np.array([0, 1, 2, 3, 4, 5])
    y = np.array([6, 7, 8, 9, 10, 11])
    
    # save to example2.npz file
    np.savez('/root/dev/example2', name1=x, name2=y) # name should be given!
    
    # load
    loaded_npz = np.load('/root/dev/example2.npz')
    print(loaded_npz['name1']) # x
    print(loaded_npz['name2']) # y



    Fig 2. npz save and load result

     

    만약 불러온 npz파일에 어떤 array가 들어있는 지 (이름을) 모른다면, 다음과 같이 직접 key를 print한다. (단순히 print(loaded_npz.keys())로는 key 내용이 출력되는 게 아니라 'KeysView'라는 object만 출력된다.)

    for key in loaded_npz.keys():
        print(key)

     

     

     

    Close

     

    npy는 ndarray 자체를 가져오기 때문에 필요 없지만, npz 파일에서 object를 불러오고 사용한 이후에는 메모리 효율 관리를 위해 'close()' 함수로 닫아주어야 한다.

    닫은 이후에는 인덱싱이 불가능해진다!

    loaded_npz.close()
    loaded_npz['name1'] # → Error: 'NoneType' object has no attribute 'open'

     

    Fig 3. NpzFile object close result

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기