[Numpy]ndarray 저장, 불러오기

반응형
    반응형

    ndarray를 저장하고 불러오는 방법입니다.

    파이썬에서 데이터를 파일로 저장하는 방법은 굉장히 많은데 

    ndarray로 저장을 하면 많은 양의 데이터를 굉장히 빠르게 저장할 수 있습니다.

    불러오는 것도 마찬가지로 굉장히 빠릅니다.

    그래서 많은 양의 ndarray를 저장할때 SQL이나 pickle 보다 효율적일 수 있습니다. 

     

    ndarray는 보통 숫자로 이루어져있기 때문에 본인이 어떤 형식으로 데이터를 저장할지는 생각하기는 해야합니다.

    이게 만능키가 아니라서 PyTables 라는 패키지로 어느정도 SQL 같이 data 다루는것도 할 수 있습니다.

    완벽하게 모든 것을 커버하고 편리하고 빠르게 저장,로드하는 것을 굳이 놔두고

    SQL을 쓰지 않았을거라 뭔가 한계점이 있을거라 봅니다.

     

    이런 얘기를 다 할 수는 없고 이번 포스팅에서는 저장 불러오기하는 방법만 소개하겠습니다.

     

    ndarray를 저장하기

    저장하는 방식은 배열을 얼마나 파일 하나에 저장하느냐에 따라 달라집니다.

     

    • 한 개의 배열 저장 : np.save('파일경로\파일이름.npy', ndarray)
    • 두 개 이상의 배열 저장 : np.savez('파일경로\파일이름.npz', ndarray1, ndarray2, ...)
    • 두 개 이상의 배열 압축해서 저장 : np.savez_compressed('파일경로\파일이름.npz', ndarray1, ndarray2, ...)

     

    한 개 배열을 저장하는 것부터 해보겠습니다. 

    저장을 하려면 np.save('파일이름.npy', ndarray) 을 입력합니다.

    한개의 파일을 저장할 때는 .npy라는 확장자를 씁니다.

    파일경로를 입력하지 않으면 현재 파이썬을 다루고 있는 폴더에 저장됩니다.

    그러고 싶지 않다면 경로를 직접 입력해줍니다.

    x = np.random.standard_normal((100,60))
    np.save('test.npy',x)

     

    해당 폴더에 가보면 파일이 만들어진 걸 볼 수 있습니다.

     

    두 개 이상일 경우 압축을 하느냐 마느냐 이정도인데 메쏘드 이름만 다를 뿐 파라미터는 동일합니다.

    압축을 하게 되면 저장용량에서 이득을 보게 됩니다.

    똑같이 하는 거라 압축 안하고 저장하는 것만 보이겠습니다.

    x,y 를 저장하겠습니다.

    x = np.random.standard_normal((100,60))
    y = np.random.standard_normal((200,100))
    np.savez('text.npz',x=x,y=y) #각각 이름 붙여줘야 불러오기 가능

    파라미터에 계속 추가해서 넣으면 끝이 납니다.

     

     

    ndarray 불러오기

    반대로 불러오겠습니다. 불러오기는 뭐든 상관없이 np.load('파일경로') 메쏘드를 사용합니다.

    한개 배열을 저장한 test.npy 부터 불러오겠습니다.

    np.load('test.npy')

     

    두 개이상의 배열일 때는 어떤 걸 출력할지 정해주어야 합니다.

    지금은 제가 방금 만들어서 어떤 이름으로 저장했는지 알겠지만 모를때는

    for문을 통해서 이름을 살펴보면 됩니다.

     

    data = np.load('test.npz')
    for i in data:
        print(i)

    저장을 할 때 x,y라는 이름으로 저장했는데 그 이름이 이렇게 나옵니다.

    이제 이름도 알았으니 하나씩 출력을 해봅시다.

    인덱싱으로 이름을 넣으면 하나씩 나옵니다.

    data['x']

    data['y']

     

     

    관련 포스팅

    [Python/Numpy] - ndarray 랜덤한값 생성

    'Python > Numpy' 카테고리의 다른 글

    [numpy] np.linalg  (0) 2021.11.06
    [Numpy] 소수점 반올림하기(np.set_printoptions)  (0) 2021.09.28
    [Numpy]격자 그리드 만들기(meshgrid)  (1) 2021.05.19
    [Numpy] 구조체(structured array)  (0) 2021.05.01
    [Numpy] np.where()  (0) 2021.04.30

    댓글

    Designed by JB FACTORY

    ....