Numpy: genfromtxt no se descomprime si dtype = None

Creado en 21 feb. 2014  ·  6Comentarios  ·  Fuente: numpy/numpy

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.

00 - Bug numpy.lib good first issue

Comentario más útil

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?

Todos 6 comentarios

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".

¿Fue útil esta página
0 / 5 - 0 calificaciones