NumPy IO

NumPy puede leer y escribir datos de texto o binarios en el disco.

NumPy introduce un formato de archivo simple para objetos ndarray:npy。

El archivo npy se utiliza para almacenar los datos, la forma, el dtype y otra información necesaria para reconstruir el ndarray.

Las funciones de IO más utilizadas son:

  • Las funciones load() y save() son las dos funciones principales para leer y escribir datos de arrays en archivos. De forma predeterminada, el array se guarda en un formato binario sin comprimir en un archivo con extensión .npy.
  • La función savez() se utiliza para escribir múltiples arrays en un archivo. De forma predeterminada, los arrays se guardan en un formato binario sin comprimir en un archivo con extensión .npz.
  • Las funciones loadtxt() y savetxt() manejan archivos de texto normales (como .txt, etc.)

numpy.save()

La función numpy.save() guarda el array en un archivo con extensión .npy.

numpy.save(file, arr, allow_pickle=True, fix_imports=True)

Descripción de parámetros:

  • file: archivo a guardar, extensión .npy; si el final de la ruta del archivo no tiene la extensión .npy, se añadirá automáticamente.
  • arr: el array a guardar
  • allow_pickle: opcional, valor booleano, permite usar pickles de Python para guardar arrays de objetos. pickle en Python se usa para serializar y deserializar objetos antes de guardarlos en un archivo de disco o leerlos desde un archivo de disco.
  • fix_imports: opcional, para facilitar la lectura de datos guardados con Python3 en Python2.

Ejemplo

import numpy as np a = np.array([1,2,3,4,5]) # Guardar en el archivo outfile.npy np.save('outfile.npy',a) # Guardar en el archivo outfile2.npy; si el final de la ruta del archivo no tiene la extensión .npy, se añadirá automáticamente. np.save('outfile2',a)

Podemos ver el contenido del archivo:

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

Se puede ver que el archivo es ilegible, porque son datos en formato binario exclusivo de NumPy.

Podemos usar la función load() para leer los datos y se mostrarán correctamente:

Ejemplo

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

El resultado de salida es:

[1 2 3 4 5]

np.savez

La función numpy.savez() guarda múltiples arrays en un archivo con extensión .npz.

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

Descripción de parámetros:

  • file: archivo a guardar, con extensión.npz, si el final de la ruta del archivo no tiene la extensión.npz, dicha extensión se añadirá automáticamente.
  • args: array a guardar. Se puede usar un parámetro de palabra clave para dar un nombre al array; los arrays pasados sin parámetros de palabra clave se nombrarán automáticamente comoarr_0, arr_1, … 。
  • kwds: el array a guardar usa el nombre de palabra clave.

Ejemplo

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 usa el parámetro de palabra clave sin_array np.savez("ejemplo.npz", a, b, sin_array = c) r = np.load("ejemplo.npz") print(r.files) # ver los nombres de cada array print(r["arr_0"]) # array a print(r["arr_1"]) # array b print(r["sin_array"]) # array c

El resultado de salida es:

['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 función savetxt() almacena datos en un formato de archivo de texto simple; para obtener los datos se usa correspondientemente la función loadtxt().

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

El parámetro delimiter puede especificar varios delimitadores, funciones convertidoras para columnas específicas, el número de líneas a omitir, etc.

Ejemplo

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

El resultado de salida es:

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

Usando el parámetro delimiter:

Ejemplo

import numpy as np a=np.arange(0,10,0.5).reshape(4,-1) np.savetxt("out.txt",a,fmt="%d",delimiter=",") # Cambiar para guardar como enteros, separados por comas b = np.loadtxt("out.txt",delimiter=",") # Al cargar también se debe especificar la separación por comas print(b)

El resultado de salida es:

[[0. 0. 1. 1. 2.]
 [2. 3. 3. 4. 4.]
 [5. 5. 6. 6. 7.]
 [7. 8. 8. 9. 9.]]
Otras extensiones