La forma más rápida de leer cada n-ésima fila con genfromtxt de numpy

Leí mis datos con genfromtxt de numpy:

import numpy as np measurement = np.genfromtxt('measurementProfile2.txt', delimiter=None, dtype=None, skip_header=4, skip_footer=2, usecols=(3,0,2)) rows, columns = np.shape(measurement) x=np.zeros((rows, 1), dtype=measurement.dtype) x[:]=394 measurement = np.hstack((measurement, x)) np.savetxt('measurementProfileFormatted.txt',measurement) 

esto funciona bien Pero solo quiero una fila 5-th , 6-th ( 6-th n-th ) en el archivo de salida final. De acuerdo con numpy.genfromtxt.html no hay un Parámetro que pueda hacer eso. No quiero iterar la matriz. ¿Hay alguna forma recomendada para hacer frente a este problema?

Para evitar leer la matriz completa, puede combinar np.genfromtxt con itertools.islice para omitir las filas. Esto es ligeramente más rápido que leer la matriz completa y luego cortarla (al menos para las matrices más pequeñas que probé).

Por ejemplo, aquí está el contenido de file.txt :

 12 34 22 17 41 28 62 71 

Entonces, por ejemplo:

 >>> import itertools >>> with open('file.txt') as f_in: x = np.genfromtxt(itertools.islice(f_in, 0, None, 3), dtype=int) 

devuelve una matriz x con los elementos indexados 0 , 3 y 6 del archivo anterior:

 array([12, 17, 62]) 

Debe leer todo el archivo de todos modos, para seleccionar el elemento n-th, haga algo como:

 >>> a = np.arange(50) >>> a[::5] array([ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45]) 

Si solo desea filas específicas en el archivo de salida final, ¿por qué no guardar solo esas filas en lugar de guardar toda la matriz de ‘medición’?

 output_rows = [5,7,11] np.savetxt('measurementProfileFormatted.txt',measurement[output_rows,:])