Numpy: genfromtxt ne décompressera pas si dtype = None

Créé le 21 févr. 2014  ·  6Commentaires  ·  Source: numpy/numpy

Je ne sais pas s'il s'agit d'un bug ou d'une fonctionnalité mais si j'utilise:

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

file.dat est un fichier de données standard avec plusieurs colonnes (ie: http://pastebin.com/ihEW2dxS) le résultat n'est pas transposé comme on s'attendrait à avoir mis unpack=True .

Par exemple, la ligne f_data = np.loadtxt('file.dat', unpack=True) fonctionne comme prévu.

00 - Bug numpy.lib good first issue

Commentaire le plus utile

J'expérimente également cela. loadtxt est un peu plus intelligent:

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

Pourquoi genfromtxt ne fait-il pas cela?

Tous les 6 commentaires

Cela ressemble à un bug, le marquant ainsi jusqu'à ce qu'il en soit informé autrement.

J'ai étudié cela un peu.

Le résultat du code de @ Gabriel-p est un tableau flex de forme (12,). Le code appelle output.T dessus, mais comme il est unidimensionnel, il s'agit d'un no-op.

Le plus gros problème que dtype=None spécifie que ce sera un tableau flex. Chaque colonne a un type inféré distinct. Si nous devions réellement transposer ce résultat, chaque ligne devrait avoir un type distinct. AFAIK, la seule façon de le faire est d'avoir une liste ou un tuple de tableaux homogènes.

Puisque numCols << numRows dans le fichier texte, l'utilisation d'une liste ou d'un tuple ne devrait pas être un gros problème. S'il était implémenté de cette façon, il décompresserait pour x, y, z = np.genfromtxt(...) comme spécifié dans la documentation et résoudrait le cas de @ Gabriel-p.

Cependant, genfromtxt dépasse déjà 600 lignes. Des pensées?

Je viens de me faire mordre par ça aussi. J'ai fait un cas de test, voir

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

J'expérimente également cela. loadtxt est un peu plus intelligent:

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

Pourquoi genfromtxt ne fait-il pas cela?

Une mise à jour sur ce problème? Il semble que cela n'ait pas changé depuis 2014.

La suggestion @ moi90 faite il y a quelques années est correcte. genfromtxt devrait faire la même chose que loadtxt .

Je pense que ce sera facile à résoudre, donc j'ai marqué le problème comme un "bon premier problème".

Cette page vous a été utile?
0 / 5 - 0 notes