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 :

appliquer un facteur correctif à une colonne d'une matrice [Python 3.X]


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    instrumentation scientifique
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : instrumentation scientifique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut appliquer un facteur correctif à une colonne d'une matrice
    Bonjour,

    Je ne parviens pas à trouver de façon simple pour appliquer un facteur correctif à une colonne d'une matrice en laissant les autres colonnes inchangées.
    Par exemple, pour passer de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [ [1, 9.0, 5.2, 12.3],
      [2, 9.1, 5.0, 12.4],
      [3, 8.9, 5.4, 12.1] ]
    au résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [ [1, 90, 5.2, 12.3],
      [2, 91, 5.0, 12.4],
      [3, 89, 5.4, 12.1] ]
    c'est-à-dire multiplier par 10 la colonne 1 et ne pas toucher aux autres

    j'ai obtenu le résultat recherché comme suit, mais ça ne me paraît pas très direct (et ça me pose d'autres problèmes quand je veux appliquer différents calculs à différentes colonnes, la concaténation concernerait d'avantage d'éléments qu'ici, et ça ne semble pas permis)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import numpy as np
    np.concatenate((mamatrice[:,0:1],10*mamatrice[:,1:2],mamatrice[:,2:]), axis=1)
    c'est une chose qui doit être basique mais qui m'échappe.

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Pourquoi rechercher vous à reconstruire la matrice ?
    Vous pouvez juste assigner une nouvelle valeur à la colonne !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import numpy as np
     
    a = np.array([ [1, 9.0, 5.2, 12.3],
                    [2, 9.1, 5.0, 12.4],
                    [3, 8.9, 5.4, 12.1] ] )
     
    print(a)
    a[:,1]*=10  #### Equivalent de   a[:,1]=10*a[:,1]
    print(a)

  3. #3
    Candidat au Club
    Femme Profil pro
    instrumentation scientifique
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : instrumentation scientifique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut mélange de pinceaux
    J'avais tenté quelque chose comme ça, en créant un objet intermédiaire avec les valeurs corrigées et en modifiant la matrice en conséquence, dans un 2ème temps.
    J'avais eu un conflit de "forme" que je n'ai pas bien saisi, j'ai cru comprendre qu'il fallait soit un vecteur (n_lignes,) soit une matrice colonne (n_lignes,1) mais je n'était pas parvenu à aboutir à une solution.

    Mais maintenant, ça fonctionne!

    Merci :-)

    Dois-je créer un nouveau fil pour l'étape suivante ?
    à savoir; comment n'appliquer ce facteur que pour certaines valeurs de cette colonne

    par exemple, multiplier par 10 uniquement les valeurs de la colonne 1 qui seraient strictement inférieures à 9

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par dersol Voir le message
    Dois-je créer un nouveau fil pour l'étape suivante ?
    En principe oui, mais je vous donne une possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import numpy as np
     
    a = np.array([ [1, 9.0, 5.2, 12.3],
                    [2, 9.1, 5.0, 12.4],
                    [3, 8.9, 5.4, 12.1] ] )
     
    print(a)
    for i in range(3):
        if a[i,1] >= 9 :
            a[i,1]*=10  #### Equivalent de   a[i,1]=10*a[i,1]
    print(a)
    Il faut éviter de tous le temps reconstruire les tableaux, il faut les éditer sur place.
    Ici il y a aussi moyen de faire avec np.where, mais ça devient un peu plus compliqué. Avec une boucle dans ce cas précis ça se fait bien.

  5. #5
    Candidat au Club
    Femme Profil pro
    instrumentation scientifique
    Inscrit en
    Mars 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : instrumentation scientifique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 3
    Par défaut np.where
    j'étais effectivement en train de tenter d'utiliser np.where() parce que j'avais compris qu'il fallait éviter les boucles si possibles, et aussi l'imbrication de condition dans des boucles
    ( dans mon cas réel, j'ai en fait 864 000 lignes et 17 colonnes , par jour de mesures)

    je suis arrivée à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import numpy as np
    a = np.array([ [1, 9.0, 5.2, 12.3],
                    [2, 9.1, 5.0, 12.4],
                    [3, 8.9, 5.4, 12.1] ] )
    print(a)
    a[np.where(a[:,1] < 9),1] *= 10
    print(a)
    Merci beaucoup.

    Dans mon cas réel, en fait la colonne corrigée est générée par une liste en compréhension dans laquelle je ne suis pas parvenue à intégrer la condition directement (mais ça devient à présent vraiment très éloigné du fil).

    Je mets le fil en RESOLU.
    Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] VBA Tableau: appliquer filtre tri renvoyer une valeur d'une colonne
    Par jbonneval dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/12/2015, 13h44
  2. [AC-2010] Format de données dans une requête appliqué à l'entête de la colonne
    Par Humanisto dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2014, 11h43
  3. [unique] appliquer la fonction sur une matrice
    Par usto2005 dans le forum MATLAB
    Réponses: 7
    Dernier message: 02/10/2013, 15h46
  4. Appliquer un FontFamily sur une colonne
    Par Dynamès dans le forum Silverlight
    Réponses: 5
    Dernier message: 12/02/2013, 17h29
  5. Appliquer un filtre sur une colonne d'un DataGrid
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 24/05/2011, 13h42

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