Tweet Share Share Share Share

Sidst opdateret den 19. august 2020

Udvikling af maskinlæringsmodeller i Python kræver ofte brug af NumPy-arrays.

NumPy arrays er effektive datastrukturer til at arbejde med data i Python, og maskinlæringsmodeller som dem i scikit-learn-biblioteket og deep learning-modeller som dem i Keras-biblioteket forventer inputdata i formatet NumPy arrays og foretager forudsigelser i formatet NumPy arrays.

Som sådan er det almindeligt at have brug for at gemme NumPy-arrays i en fil.

For eksempel kan du forberede dine data med transformationer som f.eks. skalering og har brug for at gemme dem i en fil til senere brug. Du kan også bruge en model til at lave forudsigelser og har brug for at gemme forudsigelserne i en fil til senere brug.

I denne vejledning vil du opdage, hvordan du kan gemme dine NumPy-arrays i en fil.

Når du har gennemført denne tutorial, vil du vide:

  • Hvordan du gemmer NumPy-arrays til CSV-formaterede filer.
  • Hvordan du gemmer NumPy-arrays til NPY-formaterede filer.
  • Hvordan du gemmer NumPy-arrays til komprimerede NPZ-formaterede filer.

Kick-start dit projekt med min nye bog Machine Learning Mastery With Python, herunder trinvise vejledninger og Python-kildekodefilerne til alle eksempler.

Lad os komme i gang.

Sådan gemmer du et NumPy-array til en fil til maskinlæring

Sådan gemmer du et NumPy-array til en fil til maskinlæring
Foto af Chris Combe, nogle rettigheder forbeholdt.

Tutorialoversigt

Denne tutorial er opdelt i tre dele; de er:

  • Save NumPy Array to .CSV-fil (ASCII)
  • Save NumPy Array to .NPY File (binary)
  • Save NumPy Array to .NPZ File (compressed)
  • Save NumPy Array to .CSV-fil (ASCII)

    Det mest almindelige filformat til lagring af numeriske data i filer er formatet for kommaseparerede variabler, forkortet CSV.

    Det er mest sandsynligt, at dine træningsdata og inputdata til dine modeller er gemt i CSV-filer.

    Det kan være praktisk at gemme data til CSV-filer, f.eks. forudsigelserne fra en model.

    Du kan gemme dine NumPy-arrays til CSV-filer ved hjælp af funktionen savetxt(). Denne funktion tager et filnavn og et array som argumenter og gemmer arrayet i CSV-format.

    Du skal også angive afgrænseren; dette er det tegn, der bruges til at adskille hver enkelt variabel i filen, som oftest et komma. Dette kan indstilles via argumentet “delimiter”.

    1.1 Eksempel på lagring af et NumPy-array til CSV-fil

    Eksemplet nedenfor viser, hvordan du kan gemme et enkelt NumPy-array til CSV-format.

    1
    2
    3
    4
    5
    6
    7

    # save numpy-array som csv-fil
    from numpy import asarray
    from numpy import savetxt
    # define data
    > data = asarray(])
    # save to csv file
    > savetxt(‘data.csv’, data, delimiter=’,’)

    Kørslen af eksemplet vil definere et NumPy-array og gemme det til filen ‘data.csv’.

    Arrayet har en enkelt række data med 10 kolonner. Vi ville forvente, at disse data ville blive gemt i en CSV-fil som en enkelt datarække.

    Når vi har kørt eksemplet, kan vi inspicere indholdet af ‘data.csv’.

    Vi bør se følgende:

    1
    0.000000000000000000e+00,1.000000000000000000e+00,2.000000000000000000e+00,3.000000000000000000e+00,4.000000000000000000e+00,5.000000000000000000e+00,6.000000000000000000e+00,7.000000000000000000000000000000000000000000e+00,8.0000000000000000000000000000000000e+00,9.000000000000000000000000000000e+00

    Vi kan se, at dataene er gemt korrekt som en enkelt række, og at tallene med flydende komma i arrayet blev gemt med fuld præcision.

    1.2 Eksempel på indlæsning af et NumPy-array fra CSV-fil

    Vi kan indlæse disse data senere som et NumPy-array ved hjælp af funktionen loadtext() og angive filnavnet og den samme komma-delimiter.

    Det komplette eksempel er anført nedenfor.

    1
    2
    3
    4
    5
    6

    # indlæs numpy-array fra csv-fil
    from numpy import loadtxt
    # indlæs array
    data = loadtxt(‘data.csv’, delimiter=’,’)
    # udskriv arrayet
    print(data)

    Kørsel af eksemplet indlæser dataene fra CSV-filen og udskriver indholdet, der matcher vores enkelt række med 10 kolonner, som er defineret i det foregående eksempel.

    1

    Spar NumPy Array til .NPY-fil (binær)

    I nogle tilfælde har vi en masse data i NumPy-arrays, som vi ønsker at gemme effektivt, men som vi kun har brug for at bruge i et andet Python-program.

    Derfor kan vi gemme NumPy-arrays til et oprindeligt binært format, der er effektivt at både gemme og indlæse.

    Dette er almindeligt for inddata, der er blevet forberedt, f.eks. transformerede data, som skal bruges som grundlag for at teste en række maskinlæringsmodeller i fremtiden eller køre mange eksperimenter.

    Den .npy-filformatet er velegnet til dette anvendelsestilfælde og omtales blot som “NumPy-formatet”.

    Dette kan opnås ved hjælp af funktionen save() NumPy og ved at angive filnavnet og det array, der skal gemmes.

    2.1 Eksempel på lagring af et NumPy-array til NPY-fil

    Eksemplet nedenfor definerer vores todimensionale NumPy-array og gemmer det til en .npy-fil.

    1
    2
    3
    4
    5
    6
    7

    # gem numpy-array som npy-fil
    from numpy import asarray
    from numpy import save
    # define data
    > data = asarray(])
    # save til npy-fil
    save(‘data.npy’, data)

    Når eksemplet er kørt, vil du se en ny fil i mappen med navnet “data.npy”.

    Du kan ikke inspicere indholdet af denne fil direkte med din teksteditor, da den er i binært format.

    2.2 Eksempel på indlæsning af et NumPy-array fra NPY-fil

    Du kan indlæse denne fil som et NumPy-array senere ved hjælp af load()-funktionen.

    Det komplette eksempel er anført nedenfor.

    1
    2
    3
    4
    5
    6

    # load numpy array from npy file
    from numpy import load
    # load array
    data = load(‘data.npy’)
    # udskriv arrayet
    print(data)

    Kørsel af eksemplet vil indlæse filen og udskrive indholdet, hvilket bekræfter, at både den blev indlæst korrekt, og at indholdet svarer til det, vi forventer i det samme todimensionelle format.

    1
    ]

    Sparer NumPy Array til .NPZ-fil (komprimeret)

    I nogle tilfælde forbereder vi data til modellering, som skal genbruges på tværs af flere eksperimenter, men dataene er store.

    Det kan være forbehandlede NumPy-arrays som f.eks. et korpus af tekst (hele tal) eller en samling af omskalerede billeddata (pixels). I disse tilfælde er det ønskeligt både at gemme dataene i en fil, men også i et komprimeret format.

    Dette gør det muligt at reducere gigabyte af data til hundredvis af megabyte og gør det nemt at overføre dem til andre servere i cloud computing til lange algoritmekørsler.

    Filformatet .npz er velegnet til dette tilfælde og understøtter en komprimeret version af det oprindelige NumPy-filformat.

    Med NumPy-funktionen savez_compressed() kan flere NumPy-arrays gemmes i en enkelt komprimeret .npz-fil.

    3.1 Eksempel på lagring af et NumPy-array i en NPZ-fil

    Vi kan bruge denne funktion til at gemme vores enkelte NumPy-array i en komprimeret fil.

    Det komplette eksempel er anført nedenfor.

    1
    2
    3
    4
    5
    6
    7

    # save numpy array som npz-fil
    from numpy import asarray
    from numpy import savez_compressed
    # define data
    > data = asarray(])
    # save to npy-fil
    > savez_compressed(‘data.npz’, data)

    Afkørsel af eksemplet definerer arrayet og gemmer det i en fil i komprimeret numpy-format med navnet ‘data.npz’.

    Som med .npy-formatet kan vi ikke inspicere indholdet af den gemte fil med en teksteditor, fordi filformatet er binært.

    3.2 Eksempel på indlæsning af et NumPy-array fra NPZ-fil

    Vi kan indlæse denne fil senere ved hjælp af den samme load()-funktion fra det foregående afsnit.

    I dette tilfælde understøtter funktionen savez_compressed(), at der kan gemmes flere arrays i en enkelt fil. Derfor kan funktionen load() indlæse flere arrays.

    De indlæste arrays returneres fra funktionen load() i et dict med navnene ‘arr_0’ for det første array, ‘arr_1’ for det andet osv.

    Det komplette eksempel på indlæsning af vores enkelt array er anført nedenfor.

    1
    2
    3
    4
    5
    6
    7
    8

    # indlæs numpy-array fra npz-fil
    from numpy import load
    # indlæs dict af arrays
    dict_data = load(‘data.npz’)
    # uddrag det første array
    > data = dict_data
    # udskriv arrayet
    > print(data)

    Afvikling af eksemplet indlæser den komprimerede numpy-fil, der indeholder en ordbog af arrays, udtrækker derefter det første array, som vi gemte (vi gemte kun ét), og udskriver derefter indholdet og bekræfter, at værdierne og arrayets form stemmer overens med det, vi gemte i første omgang.

    1
    ]

    Videre læsning

    Dette afsnit indeholder flere ressourcer om emnet, hvis du ønsker at gå i dybden.

    Posts

    • Sådan indlæses maskinlæringsdata i Python
    • En blid introduktion til NumPy-arrays i Python
    • Sådan indekseres, skæres og omformes NumPy-arrays til maskinlæring

    API’er

    • numpy.savetxt API
    • numpy.save API
    • numpy.savez API
    • numpy.savez_compressed API
    • numpy.load API
    • numpy.loadtxt API

    Summary

    I denne vejledning har du opdaget, hvordan du gemmer dine NumPy-arrays til en fil.

    Specifikt har du lært:

    • Hvordan du gemmer NumPy-arrays til CSV-formaterede filer.
    • Hvordan du gemmer NumPy-arrays til NPY-formaterede filer.
    • Sådan gemmer du NumPy arrays til komprimerede NPZ-formaterede filer.

    Har du nogen spørgsmål?
    Sæt dine spørgsmål i kommentarerne nedenfor, og jeg vil gøre mit bedste for at svare.

    Opdag hurtig maskinlæring i Python!

    Master Machine Learning With Python

    Udvikle dine egne modeller på få minutter

    …med blot et par linjer scikit-learn-kode

    Lær hvordan i min nye E-bog:
    Machine Learning Mastery With Python

    Dækker selvstuderende tutorials og end-to-end-projekter som:
    Ladning af data, visualisering, modellering, tuning og meget mere…

    Finally Bring Machine Learning To
    Your Own Projects

    Skip det akademiske. Just Results.

    Se, hvad der er inde i

    Tweet Del Del Del

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret.