English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

IO NumPy

NumPy introduce un formato di file semplice per l'oggetto ndarray: npy.

I file npy vengono utilizzati per memorizzare i dati necessari per ricostruire ndarray, grafici, dtype e altre informazioni.

Le funzioni di IO più comuni sono:

Le funzioni load() e save() sono le due principali funzioni per leggere e scrivere dati di array di file, per impostazione predefinita, gli array sono salvati in formato binario non compresso con estensione .npy. La funzione savze() viene utilizzata per scrivere più array in un file, per impostazione predefinita, gli array sono salvati in formato binario non compresso con estensione .npz. Le funzioni loadtxt() e savetxt() gestiscono i file di testo normali (.txt, ecc.)

numpy.save()

La funzione numpy.save() salva l'array in un file con estensione .npy.
numpy.save(file, arr, allow_pickle=True, fix_imports=True)

Descrizione dei parametri:

file:file da salvare, con estensione .npy, se la percorso finale del file non ha estensione .npy, l'estensione .npy verrà aggiunta automaticamente. arr: array da salvare allow_pickle: opzionale, valore booleano, permette di salvare array di oggetti con Python pickles. fix_imports: opzionale, per facilitare la lettura dei dati salvati da Python3 in Python2.
 import numpy as np 
  
 a = np.array([1,2,3,4,5]) 
  
 # Salvare su file test.npy
 np.save('test.npy',a) 
  
 # Salvare su file test1.npy, se la percorso finale del file non ha estensione.npy, l'estensione.npy verrà aggiunta automaticamente
 np.save('test1.npy',a)

Possiamo controllare il contenuto del file:

 $ cat test.npy 
 ?NUMPYv{'descr': '<i8', 'fortran_order': False, 'shape': (5,),} 
 $ cat test1.npy 
 ?NUMPYv{'descr': '<i8', 'fortran_order': False, 'shape': (5,),}

Si può vedere che i file sono corrotti, perché sono dati successivi al formato binario specifico di Numpy.

Possiamo utilizzare la funzione load() per leggere i dati e mostrarli correttamente:

import numpy as np 
b = np.load('test.npy') 
print (b)

Il risultato dell'output è:

[1 2 3 4 5]

np.savez

La funzione numpy.savez() salva più array in un file con estensione npz.

numpy.savez(file, *args, **kwds)

Descrizione dei parametri:

file:Il file da salvare, estensione .npz,se non c'è un'estensione alla fine del percorso del file .npz,estensione del file verrà aggiunta automaticamente. args: Gli array da salvare possono utilizzare i parametri chiave per dare un nome agli array, gli array trasmessi con parametri non chiave verranno automaticamente denominati arr_0, arr_1, … . kwds: Gli array da salvare utilizzano il nome chiave.
 import numpy as np
 a = np.array([[1,2,3],[4,5,6]])
 b = np.arange(0, 1.0, 0.1)
 c = np.sin(b)
 # c utilizza il parametro chiave sin_array
 np.savez('w3codebox.npz', a, b, sin_array = c)
 r = np.load('w3codebox.npz') 
 print(r.files) # visualizzare i nomi degli array
 print(r['arr_0']) # array a
 print(r['arr_1']) # array b
 print(r['sin_array']) # array c

Il risultato dell'output è:

 ['sin_array', 'arr_0', 'arr_1']
 [[1 2 3]
  [4 5 6]
 [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
 [0. 0.09983342 0.19866933 0.29552021 0.38941834 0.47942554
  0.56464247 0.64421769 0.71735609 0.78332691

savetxt()

La funzione savetxt() memorizza i dati in un formato di file di testo semplice, corrispondendo all'uso della funzione loadtxt() per ottenere i dati.

 np.loadtxt(FILENAME, dtype=int, delimiter=' ')
 np.savetxt(FILENAME, a, fmt="%d", delimiter=",")

Il parametro delimiter può specificare vari separatori, funzioni di conversione per colonne specifiche, righe da saltare, ecc.

 import numpy as np
 a = np.array([1,2,3,4,5]) 
 np.savetxt('out.txt',a) 
 b = np.loadtxt('out.txt') 
  
 print(b)

Il risultato dell'output è:

[1. 2. 3. 4. 5.]

Utilizzo del parametro delimiter:

 import numpy as np
 a=np.arange(0,10,0.5).reshape(4,-1)
 np.savetxt("out.txt",a,fmt="%d",delimiter=",")  # Salva come intero, separato da virgola
 b = np.loadtxt("out.txt",delimiter=",")  # load anche specificare come separatore la virgola
 print(b)
   [[0. 0. 1. 1. 2.]]
  [2. 3. 3. 4. 4.]
  [5. 5. 6. 6. 7.]
  [7. 8. 8. 9. 9.]]