python - read - Cargue el archivo de texto como cadenas usando numpy.loadtxt()
numpy savetxt (3)
¿Es esencial que necesites una matriz NumPy? De lo contrario, podría acelerar el proceso cargando los datos como una lista anidada.
def load(fname):
'''''' Load the file using std open''''''
f = open(fname,''r'')
data = []
for line in f.readlines():
data.append(line.replace(''/n'','''').split('' ''))
f.close()
return data
Para un archivo de texto con palabras de 4000x4000 esto es aproximadamente 10 veces más rápido que loadtxt
.
Me gustaría cargar un archivo de texto grande (alrededor de 1 GB con 3 * 10 ^ 6 filas y 10 - 100 columnas) como una matriz np 2D que contiene cadenas. Sin embargo, parece que numpy.loadtxt () solo toma flotantes como predeterminados. ¿Es posible especificar otro tipo de datos para toda la matriz? He intentado lo siguiente sin suerte:
loadedData = np.loadtxt(address, dtype=np.str)
Recibo el siguiente mensaje de error:
/Library/Python/2.7/site-packages/numpy-1.8.0.dev_20224ea_20121123-py2.7-macosx-10.8-x86_64.egg/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)
833 fh.close()
834
--> 835 X = np.array(X, dtype)
836 # Multicolumn data are returned with shape (1, N, M), i.e.
837 # (1, 1, M) for a single row - remove the singleton dimension there
ValueError: cannot set an array element with a sequence
¿Algunas ideas? (No sé el número exacto de columnas en mi archivo de antemano).
También hay read_csv
en Pandas , que es rápido y admite separadores de columnas sin coma y escritura automática por columnas:
import pandas as pd
df = pd.read_csv(''your_file'',sep=''/t'')
Se puede convertir en una matriz NumPy si prefiere ese tipo con:
import numpy as np
arr = np.array(df)
Este es, con mucho, el enfoque de importación de texto más fácil y más maduro que he encontrado.
Utilice genfromtxt
en genfromtxt
lugar. Es un método mucho más general que loadtxt
:
import numpy as np
print np.genfromtxt(''col.txt'',dtype=''str'')
Utilizando el archivo col.txt
:
foo bar
cat dog
man wine
Esto da:
[[''foo'' ''bar'']
[''cat'' ''dog'']
[''man'' ''wine'']]
Si espera que cada fila tenga el mismo número de columnas, lea la primera fila y establezca el atributo filling_values
para corregir las filas faltantes.