IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Opérations sur structures de données avec des arrays numpy


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 15
    Points : 13
    Points
    13
    Par défaut Opérations sur structures de données avec des arrays numpy
    Hello et bonnes fêtes de fin d'année à tous!

    J'ai deux objets (que je vais appeler A et B), chacun composés de plusieurs structures de données dont principalement des arrays numpy (les deux qui m'intéressent dans un premier temps sont des arrays 2D que je vais appeler T et d).

    A.T.shape[0] == A.d.shape[0], B.T.shape[0] == B.d.shape[0] mais A.T.shape[0] != B.T.shape[0].
    A.T.shape[1] != A.d.shape[1] et B.T.shape[1] != B.d.shape{A].
    A.T.shape[1] == B.T.shape[1] mais A.d.shape[1] != B.d.shape[1].

    T est un index temporel qui permet d'ordonner les valeurs de tous les arrays de A et de B.
    Pour compliquer les choses, les arrays T n'ont pas 1 mais deux formats de date pour chaque rangée (année décimale et jour julien, donc [A|B].T.shape[1] == 2).

    Je ne peux pas toucher à ces objets, je dois travailler avec tels quels.

    J'ai besoin de générer un objet qui inclut toutes les données de A et B en gardant l'index temporel. En gros, insérer B dans A de manière ordonnée, aussi bien pour T que pour d et tous les autres arrays associés.

    Ma question est peut-être très bête, je ne sais pas comment faire pour réaliser cette opération, encore moins de manière efficace.

    Pour l'instant je crée un array global des temps en concatenant A.T et B.T et en les ordonant (on doit pouvoir le faire en one-liner mais ce n'est pas la question encore) puis j'itère sur sa longueur pour trouver toutes les rangées de A.T et B.T qui correspondent à cet index (pour ensuite aller chercher les données dans les autres arrays de A et de B et peupler de nouveaux arrays combinant les arrays source) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    full_index = np.concatenate((A.T, B.T))
    full_index = full_index[full_index[:,0].argsort()]
    for k  in range(full_index.shape[0]):
        if full_index[k,0] in A.T[:,0]:
            rangA = = np.where(np.all(full_index[k] == A.T[:], axis=1))
    Sauf que là ça plante parce que la valeur dans la deuxième colonne de full_index et de A ne sont pas toujours (la plupart du temps mais pas systématiquement) exactement les mêmes et donc la comparaison renvoie un array vide.

    En regardant le contenu dans ces cas, par exemple, en colonne 1 j'ai 50129.50000000003 pour la valeur dans l'index et 50129.5 pour la valeur dans A.T. Les deux sont des float64.

    Si je pouvais ne comparer que la valeur de la colonne 0 des deux arrays pour obtenir rangA je contournerais sans doute le problème (sauf que je n'arrive pas à trouver la syntaxe...) mais en plus, j'imagine que si les valeurs dans la colonne 1 ne sont pas systématiquement les mêmes parce que j'ai des modifications de la valeur (lors de la concatenation ?), je peux aussi rater des cas où la valeur de la colonne 0 devrait pointer vers une rangée soit dans A.T soit dans B.T.

    Bref, c'est le bazar... J'ai l'impression de mal m'y prendre mais je ne sais pas comment faire pour corriger ça. Si vous avez des pistes, je suis preneur, merci !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 517
    Points : 37 135
    Points
    37 135
    Par défaut
    Salut,

    Il faudrait commencer par avoir un petit exemple qui reflète le contenu des tableaux A.T et B.T et du résultat à obtenir.

    Ma question est peut-être très bête, je ne sais pas comment faire pour réaliser cette opération, encore moins de manière efficace.
    Ce qui est ballot, c'est de penser qu'il suffira de lire votre prose pour imaginer comment faire! Si on a une idée, il va falloir la tester pour vérifier qu'elle fonctionne avant de la proposer.
    Rien de très magique! Et sans un minimum de données représentatives pour construire facilement les tableaux que vous appelez A.T et B.T...

    note: quelque soit la complexité de A et de B, en travaillant sur A.T et B.T on "simplifie" et on ignore cette complexité.

    - W

Discussions similaires

  1. [Tableaux] Tableau associatif avec des array
    Par Piccolo_son dans le forum Langage
    Réponses: 6
    Dernier message: 18/12/2007, 09h23
  2. Réponses: 2
    Dernier message: 14/11/2007, 15h49
  3. Comment structurer une application avec des multiples versions ?
    Par Worldofdada dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/05/2007, 11h52
  4. Réponses: 3
    Dernier message: 16/05/2007, 10h19
  5. Réponses: 2
    Dernier message: 08/05/2006, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo