No estoy seguro si esto es un error o una característica, pero si uso:
f_data = np.genfromtxt('file.dat', dtype=None, unpack=True)
donde file.dat
es un archivo de datos estándar con varias columnas (es decir: http://pastebin.com/ihEW2dxS) el resultado no se transpone como uno esperaría haber establecido unpack=True
.
Por ejemplo, la línea f_data = np.loadtxt('file.dat', unpack=True)
funciona como se esperaba.
Parece un error, marcándolo así hasta que se le informe lo contrario.
Investigué esto un poco.
El resultado del código de @ Gabriel-p es una matriz flexible de shape (12,). El código llama a output.T
en él, pero como es unidimensional, no es una operación.
El mayor problema que dtype=None
especifica que será una matriz flexible. Cada columna tiene un tipo inferido independiente. Si tuviéramos que transponer realmente este resultado, cada fila debería tener un tipo diferente. AFAIK, la única forma de hacerlo es tener una lista o tupla de matrices homogéneas.
Dado que numCols << numRows en el archivo de texto, usar una lista o tupla no debería ser un gran problema. Si se implementa de esa manera, se descomprimiría por x, y, z = np.genfromtxt(...)
como se especifica en los documentos, y resolvería el caso de @ Gabriel-p.
Sin embargo, genfromtxt
ya tiene más de 600 líneas. ¿Alguna idea?
Esto también me mordió. Hice un caso de prueba, mira
https://github.com/hsgg/numpy.git
Yo también experimento esto. loadtxt
es un poco más inteligente:
if unpack:
if len(dtype_types) > 1:
# For structured arrays, return an array for each field.
return [X[field] for field in dtype.names]
else:
return X.T
¿Por qué genfromtxt
no hace esto?
¿Alguna actualización sobre este tema? Parece que no ha cambiado desde 2014.
La sugerencia que hizo @ moi90 hace un par de años es correcta. genfromtxt
debería hacer lo mismo que loadtxt
.
Creo que será fácil de solucionar, por lo que he etiquetado el problema como un "buen primer problema".
Comentario más útil
Yo también experimento esto.
loadtxt
es un poco más inteligente:¿Por qué
genfromtxt
no hace esto?