uint8 type float astype array python numpy save

python - type - Guardar matriz numpy en modo de añadir



type numpy array (5)

El formato de archivo .npy es perfectamente .npy para trabajar con conjuntos de datos pequeños, sin depender de módulos externos que no sean numpy .

Sin embargo, cuando comienza a tener grandes cantidades de datos, se prefiere el uso de un formato de archivo, como HDF5, diseñado para manejar tales conjuntos de datos, [1] .

Por ejemplo, a continuación hay una solución para guardar matrices numpy en HDF5 con PyTables ,

Paso 1: Crear un almacenamiento de EArray extensible

import tables import numpy as np filename = ''outarray.h5'' ROW_SIZE = 100 NUM_COLUMNS = 200 f = tables.open_file(filename, mode=''w'') atom = tables.Float64Atom() array_c = f.create_earray(f.root, ''data'', atom, (0, ROW_SIZE)) for idx in range(NUM_COLUMNS): x = np.random.rand(1, ROW_SIZE) array_c.append(x) f.close()

Paso 2: anexar filas a un conjunto de datos existente (si es necesario)

f = tables.open_file(filename, mode=''a'') f.root.data.append(x)

Paso 3: leer un subconjunto de los datos

f = tables.open_file(filename, mode=''r'') print(f.root.data[1:10,2:20]) # e.g. read from disk only this part of the dataset

¿Es posible guardar una matriz numpy agregándola a un archivo npy ya existente --- algo como np.save(filename,arr,mode=''a'') ?

Tengo varias funciones que tienen que iterar sobre las filas de una matriz grande. No puedo crear la matriz a la vez debido a restricciones de memoria. Para evitar crear las filas una y otra vez, quise crear cada fila una vez y guardarlas en un archivo adjuntándolas a la fila anterior del archivo. Más tarde, pude cargar el archivo npy en mmap_mode, accediendo a los segmentos cuando sea necesario.


Esta es una expansión de la respuesta de Mohit Pandey que muestra un ejemplo completo de guardar / cargar. Se probó utilizando Python 3.6 y Numpy 1.11.3.

from pathlib import Path import numpy as np import os p = Path(''temp.npy'') with p.open(''ab'') as f: np.save(f, np.zeros(2)) np.save(f, np.ones(2)) with p.open(''rb'') as f: fsz = os.fstat(f.fileno()).st_size out = np.load(f) while f.tell() < fsz: out = np.vstack((out, np.load(f)))

out = array ([[0., 0.], [1., 1.]])


Para agregar datos a un archivo ya existente usando numpy.save, deberíamos usar:

f_handle = file(filename, ''a'') numpy.save(f_handle, arr) f_handle.close()

He comprobado que funciona en python 2.7 y numpy 1.10.4

He adaptado el código de here , que habla sobre el método savetxt.


Puedes probar algo como leer el archivo y luego agregar nuevos datos

import numpy as np import os.path x = np.arange(10) #[0 1 2 3 4 5 6 7 8 9] y = np.load("save.npy") if os.path.isfile("save.npy") else [] #get data if exist np.save("save.npy",np.append(y,x)) #save the new

después de 2 operaciones:

print(np.load("save.npy")) #[0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9]


.npy archivos .npy contienen un encabezado que tiene la forma y el tipo de la matriz. Si sabe cómo se ve la matriz resultante, puede escribir el encabezado usted mismo y luego los datos en fragmentos. Por ejemplo, aquí está el código para concatenar matrices 2d:

import numpy as np import numpy.lib.format as fmt def get_header(fnames): dtype = None shape_0 = 0 shape_1 = None for i, fname in enumerate(fnames): m = np.load(fname, mmap_mode=''r'') # mmap so we read only header really fast if i == 0: dtype = m.dtype shape_1 = m.shape[1] else: assert m.dtype == dtype assert m.shape[1] == shape_1 shape_0 += m.shape[0] return {''descr'': fmt.dtype_to_descr(dtype), ''fortran_order'': False, ''shape'': (shape_0, shape_1)} def concatenate(res_fname, input_fnames): header = get_header(input_fnames) with open(res_fname, ''wb'') as f: fmt.write_array_header_2_0(f, header) for fname in input_fnames: m = np.load(fname) f.write(m.tostring(''C''))

Si necesita una solución más general (edite el encabezado en su lugar mientras agrega) tendrá que recurrir a trucos de fseek como en [1].

Inspirado por
[1]: https://mail.scipy.org/pipermail/numpy-discussion/2009-August/044570.html (no funciona fuera de la caja)
[2]: https://docs.scipy.org/doc/numpy/neps/npy-format.html
[3]: https://github.com/numpy/numpy/blob/master/numpy/lib/format.py