Numpy: genfromtxt não descompacta se dtype = None

Criado em 21 fev. 2014  ·  6Comentários  ·  Fonte: numpy/numpy

Não tenho certeza se isso é um bug ou um recurso, mas se eu usar:

f_data = np.genfromtxt('file.dat', dtype=None, unpack=True)

onde file.dat é um arquivo de dados padrão com várias colunas (isto é: http://pastebin.com/ihEW2dxS) o resultado não é transposto como seria de esperar tendo definido unpack=True .

Por exemplo, a linha f_data = np.loadtxt('file.dat', unpack=True) funciona conforme o esperado.

00 - Bug numpy.lib good first issue

Comentários muito úteis

Eu também experimento isso. loadtxt é um pouco mais 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 que genfromtxt não faz isso?

Todos 6 comentários

Parece um bug, marcando-o assim até que seja informado o contrário.

Eu investiguei isso um pouco.

O resultado do código de @Gabriel-p é um array flex (12) de forma. O código chama output.T nele, mas como é unidimensional, é autônomo.

O maior problema é que dtype=None especifica que será flex array. Cada coluna tem um tipo inferido separado. Se tivéssemos de realmente transpor esse resultado, cada linha precisaria ter um tipo separado. AFAIK, a única maneira de fazer isso é ter uma lista ou tupla de arrays homogêneos.

Como numCols << numRows no arquivo de texto, usar uma lista ou tupla não deve ser um grande problema. Se implementado dessa forma, seria descompactado por x, y, z = np.genfromtxt(...) conforme especificado nos documentos e resolveria o caso de @Gabriel-p.

No entanto, genfromtxt já tem mais de 600 linhas. Alguma ideia?

Também fui mordido por isso. Eu fiz um caso de teste, veja

https://github.com/hsgg/numpy.git

Eu também experimento isso. loadtxt é um pouco mais 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 que genfromtxt não faz isso?

Alguma atualização sobre este problema? Parece que não mudou desde 2014.

A sugestão que @ moi90 fez alguns anos atrás está correta. genfromtxt deve fazer a mesma coisa que loadtxt .

Acho que será fácil de corrigir, então marquei o problema como um "bom primeiro problema".

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mrava87 picture mrava87  ·  53Comentários

valentinstn picture valentinstn  ·  61Comentários

khinsen picture khinsen  ·  88Comentários

InonS picture InonS  ·  70Comentários

jakirkham picture jakirkham  ·  55Comentários