numpy : charger un fichier texte dans un 2D structured array.

a marqué ce sujet comme résolu.

Bonjour,

Dans la catégorie « it’s not a bug, it’s a feature » :

J’ai besoin de charger un fichier texte dans un structured array numpy. Sauf si on utilise un dtype correspondant à un structured array, les fonction np.loadtxt et np.genfromtxt ne retournent plus un array 2D, mais un array 1D de tuples correspondant à chaque ligne. Ce qui pose problème lorsque l’on fait par exemple un vstack sur un array 2D précédemment créé.

J’aimerai autant que possible éviter d’utiliser Pandas, ou éviter des itérations trop lourdes. Est-ce que quelqu’un a déjà été confronté à ce problème ?

Edit: avec un peu de code, ce sera peut-être plus explicite :

data = np.empty((0, len(dtype)), dtype=dtype)  # Initialize np.array
folders = list(data_folder.dirs())  # List of subfolders

for folder in folders:
    for object_file in folder.files("*.xyz"):
        current_data = np.loadtxt(object_file, dtype=dtype)
        data = np.vstack((data,     current_data))

Avec ce code, data.shape = (0, 4) et current_data.shape = (5929833,) au lieu de (5929833, 4), ce qui fait que le vstack lève une erreur.

+0 -0

Salut, Je pense que tu peux essayer d’itérer sur current_data pour les vstack un par un sur ton data (la conversion de tuple vers np.ndarray est implicite).

Voilà ce que ça donnerait :

data = np.empty((0, len(dtype)), dtype=dtype)  # Initialize np.array
folders = list(data_folder.dirs())  # List of subfolders

for folder in folders:
    for object_file in folder.files("*.xyz"):
        current_data = np.loadtxt(object_file, dtype=dtype)
        for row in current_data:
            data = np.vstack((data, row))

Peut-être qu’il y a moyen de faire plus simple…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte