Ce face np.save() și np.load()
np.save() scrie un singur tablou într-un fișier .npy (extensia se adaugă singură dacă lipsește). Formatul este binar și păstrează exact forma (shape) și tipul (dtype), deci np.load() îți dă înapoi același tablou. Fișierul nu se poate citi într-un editor de text sau în Excel; pentru asta folosește np.savetxt().
np.savez() pune mai multe tablouri într-o singură arhivă .npz, fiecare cu un nume dat ca argument (note=..., medii=...). np.load() pe un .npz returnează un obiect asemănător unui dicționar, din care iei tablourile după nume; îl deschizi cu with ca fișierul să fie închis la final. np.savez_compressed() face același lucru, dar comprimă datele: fișierul e mai mic, mai ales pentru date care se repetă.
Implicit np.load() are allow_pickle=False: refuză tablourile de obiecte Python, pentru că un fișier pickle primit de la altcineva poate rula cod. Activează opțiunea doar pentru fișiere în care ai încredere.
Parametri
| Parametru | Descriere |
|---|---|
fisier |
Numele fișierului (sau un obiect fișier deschis în mod binar). |
arr |
La save: tabloul de salvat. |
nume=arr |
La savez/savez_compressed: tablourile, fiecare cu numele sub care va fi găsit în arhivă. |
mmap_mode |
La load: 'r' deschide un fișier .npy mare fără să-l încarce tot în memorie. |
allow_pickle |
La load: permite tablouri de obiecte Python (implicit False). |
Ce returnează
save/savez: None. load: un tablou pentru .npy sau un obiect NpzFile (ca un dicționar) pentru .npz.
Exemple
Exemplul 1: Un tablou în fișier .npy
import numpy as np
note = np.array([[9, 8, 10], [6, 7, 5]], dtype=np.int16)
np.save("note", note)
citit = np.load("note.npy")
print(citit)
print(citit.dtype, citit.shape)
print(np.array_equal(note, citit))
Rezultat
[[ 9 8 10]
[ 6 7 5]]
int16 (2, 3)
True
Exemplul 2: Mai multe tablouri într-un .npz
import numpy as np
orase = np.array(["Iași", "Cluj", "Brașov"])
vanzari = np.array([1200.5, 980.0, 1430.25])
np.savez("raport.npz", orase=orase, vanzari=vanzari)
with np.load("raport.npz") as date:
print(sorted(date.files))
print(date["orase"])
print(date["vanzari"].sum())
Rezultat
['orase', 'vanzari']
['Iași' 'Cluj' 'Brașov']
3610.75
Exemplul 3: Arhivă comprimată
Datele cu multe valori repetate se comprimă bine, deci fișierul .npz comprimat este mult mai mic.
import os
import numpy as np
zile = np.zeros(100_000)
zile[::1000] = 1.5
np.savez("normal.npz", zile=zile)
np.savez_compressed("comprimat.npz", zile=zile)
normal = os.path.getsize("normal.npz")
comprimat = os.path.getsize("comprimat.npz")
print("Comprimat mai mic:", comprimat < normal)
print("Raport sub 5%:", comprimat / normal < 0.05)
with np.load("comprimat.npz") as date:
print(date["zile"].sum())
Rezultat
Comprimat mai mic: True
Raport sub 5%: True
150.0
Greșeli frecvente
- Salvezi cu
np.save("note", a)și încarci cunp.load("note"): fișierul se numește de faptnote.npy, deci daiFileNotFoundError. Scrie extensia la încărcare. - Încerci să deschizi un
.npyîn Excel sau într-un editor: este binar. Pentru un fișier text/CSV foloseștenp.savetxt(). - Dai tablourile lui
np.savez()fără nume (np.savez("f.npz", a, b)): primesc numele automatearr_0,arr_1. Dă-le nume cunote=a.
Comenzi înrudite
np.savetxt() și np.loadtxt(): Scrie un tablou într-un fișier text sau CSV (np.savetxt) și îl citește înapoi (np.loadtxt, np.genfromtxt pentru valori lipsă).ndarray.dtype: Arată tipul elementelor dintr-un tablou (int64, float64, bool etc.) și câți octeți ocupă fiecare.np.array(): Creează un tablou NumPy (ndarray) dintr-o listă, o listă de liste sau alt obiect asemănător.