Numpy: genfromtxt wird nicht entpackt, wenn dtype = None ist

Erstellt am 21. Feb. 2014  ·  6Kommentare  ·  Quelle: numpy/numpy

Ich bin mir nicht sicher, ob dies ein Fehler oder eine Funktion ist, aber ob ich Folgendes verwende:

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

Dabei ist file.dat eine Standarddatendatei mit mehreren Spalten (z. B. http://pastebin.com/ihEW2dxS). Das Ergebnis wird nicht so transponiert, wie man es von unpack=True erwarten würde.

Zum Beispiel funktioniert die Zeile f_data = np.loadtxt('file.dat', unpack=True) wie erwartet.

00 - Bug numpy.lib good first issue

Hilfreichster Kommentar

Ich erlebe das auch. loadtxt ist etwas schlauer:

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

Warum macht genfromtxt nicht?

Alle 6 Kommentare

Sieht aus wie ein Fehler, der so markiert wird, bis etwas anderes mitgeteilt wird.

Ich habe das ein bisschen untersucht.

Das Ergebnis des Codes von @ Gabriel-p ist ein Shape-Array mit Form (12,). Der Code ruft output.T auf, aber da es eindimensional ist, ist dies ein No-Op.

Das größte Problem, das dtype=None gibt an, dass es sich um ein Flex-Array handelt. Jede Spalte hat einen eigenen abgeleiteten Typ. Wenn wir dieses Ergebnis wirklich umsetzen würden, müsste jede Zeile einen eigenen Typ haben. AFAIK, der einzige Weg, dies zu tun, besteht darin, eine Liste oder ein Tupel homogener Arrays zu haben.

Da numCols << numRows in der Textdatei ist, sollte die Verwendung einer Liste oder eines Tupels keine große Sache sein. Wenn es auf diese Weise implementiert würde, würde es für x, y, z = np.genfromtxt(...) entpackt, wie in den Dokumenten angegeben, und den Fall von @ Gabriel-p lösen.

genfromtxt ist jedoch bereits über 600 Zeilen. Irgendwelche Gedanken?

Ich bin auch davon gebissen worden. Ich habe einen Testfall gemacht

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

Ich erlebe das auch. loadtxt ist etwas schlauer:

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

Warum macht genfromtxt nicht?

Gibt es ein Update zu diesem Thema? Es scheint, dass es sich seit 2014 nicht geändert hat.

Der vor ein paar Jahren gemachte Vorschlag @ moi90 ist richtig. genfromtxt sollte dasselbe tun wie loadtxt .

Ich denke, es wird leicht zu beheben sein, deshalb habe ich das Problem als "gutes erstes Problem" markiert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen