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.
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".
Comentários muito úteis
Eu também experimento isso.
loadtxt
é um pouco mais inteligente:Por que
genfromtxt
não faz isso?