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

Python Discussion :

Modifier une colonne d'une matrice en python [Python 2.X]


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 122
    Points : 66
    Points
    66
    Par défaut Modifier une colonne d'une matrice en python
    Bonjour,

    J'ai une matrice A(n,3) qui peut être conséquente en fonction de la valeur de n qui dépend des problèmes traités.

    La matrice A(n,3) est initialisée à 0 (toutes les composantes de cette matrice sont nulles).

    J'ai par ailleurs un vecteur I(n,1) avec des composantes qui sont déterminées à l'aide d'un calcul spécifique (voir le code ci-dessous).

    L'objectif est de remplacer la 2ème colonne de toutes les lignes de la matrice A(n,3) par les composantes du vecteur I(n,1).

    Bien entendu, cette procédure est à coder en Python.

    Je n'ai aucune idée sur comment procéder (je débute en Python), mes recherches sur internet sont restées infructueuses et ça fait 2 jours que je galère là-dessus alors je viens chercher de l'aide par ici pour avancer.

    D'avance merci pour votre aide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    import sys
    import os
    from numpy import*
    import numpy as np
     
    valmin=0.
    valmax=100.
    npoints=5
     
    def matrice(i, j):
    	return [[0 for q in range(0,j)] for p in range(0,i)]
     
     
    A=matrice(npoints,3)
     
    print A 
     
    # Calcul de delta (increment)
    delta=(valmax-valmin)/npoints
    # cal
     
    vec_indices=[]
    for i in range(npoints):
    	vec_indices.append(i*delta)
    	print i
     
    print vec_indices
     
    print len(vec_indices), len(A)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par mecaplus Voir le message
    Je n'ai aucune idée sur comment procéder (je débute en Python), mes recherches sur internet sont restées infructueuses et ça fait 2 jours que je galère là-dessus alors je viens chercher de l'aide par ici pour avancer.
    Si vous débutez en Python, pas facile de lire la documentation de numpy.
    fabriquons un array 3x2 et un vecteur 2x1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> import numpy as np
    >>> a = np.array([[1, 2], [3, 4], [5, 6]])
    >>> a
    array([[1, 2],
           [3, 4],
           [5, 6]])
    >>> i = np.array([7, 8, 9])
    >>> i
    array([7, 8, 9])
    Après, il faut trouver la syntaxe pour dire "la colonne" pour lui assigner "i":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a[:,1] = i
    >>> a
    array([[1, 7],
           [3, 8],
           [5, 9]])
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 122
    Points : 66
    Points
    66
    Par défaut
    Bonjour,
    Merci pour votre réponse. Suite à votre éclairage, j'arrive à quelque chose qui répond à l'objectif, sauf que ça ramène un autre petit souci qui n'en est peut être pas un.
    Voilà comment j'ai procédé :
    J'ai transformé ma matrice A(n,3) et mon vecteur I(n,1) en array à l'aide de numpy en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A=np.array(A)  # c'est la matrice A(n,3)
    vec_indices=np.array(vec_indices) # c'est le vecteur I(n,1)
    Le résultat est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    vec_indices=[0. 20. 40. 60. 80.]
    A=[[0 0 0]
         [0 0 0]
         [0 0 0]
         [0 0 0]
         [0 0 0]]
    Ensuite en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    A[:,1]=vec_indices
    # ça donne le resultat :
    A=[[0 0 0]
         [0 20 0]
         [0 40 0]
         [0 60 0]
         [0 80 0]]
    Après quelques transformations ou conversions successives, le résultat renvoyé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    A=((0 0 0),(0 20 0),(0 40 0),(0 60 0),(0 80 0))
    qui correspond à quelque chose près au résultat attendu, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    A=((0. 0. 0.),(0. 20. 0.),(0. 40. 0.),(0. 60. 0.),(0. 80. 0.))
    Ce qui m'emmène à la question suivante :

    Est-ce que les composantes de la matrice A sont bien devenues des nombres entiers ou c'est juste un affichage ?
    Si oui, comment transformer ces valeurs entières en valeurs réelles ? J'ai essayé float(A) mais ça ne fonctionne pas

    Voici la nouvelle version de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    import sys
    import os
    from numpy import*
    import numpy as np
    #
    valmin=0.
    valmax=100.
    npoints=5
    #
    def matrice(i, j):
    	return [[0 for q in range(0,j)] for p in range(0,i)]
     
    A=matrice(npoints,3)
    #
    # Calcul de delta (increment)
    delta=(valmax-valmin)/npoints
    # cal
     
    vec_indices=[]
    for i in range(npoints):
    	vec_indices.append(i*delta)
     
    print 'type du vecteur :', type(vec_indices)
    print 'type de la matrice :', type(A)
     
    # transformation A[] et de vec_indices[] en array a l aide de numpy 
    # pour pouvoir effectuer des operations de numpy
    vec_indices=np.array(vec_indices)
    A=np.array(A)
     
    # Affichage du resultats
    print 'vec_indices=', vec_indices
    print 'A=', A
     
    # Remplacement de la deuxieme collonne de A par le vecteur vec_indices
    A[:,1]=vec_indices
     
    # Affichage du resultats 
    print 'A=', A
    print 'Type de la matrice A :', type(A)
     
    # Convertir la array numpy en list python pour la matrice A
    A=A.tolist()
     
    # Convert list of lists to tuple of tuples 
    A=tuple(tuple(i) for i in A)
    # Affichage de A
    print 'A=', A
    # Affichage du type de A 
    print 'type de la matrice A :', type(A)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par mecaplus Voir le message
    Ce qui m'emmène à la question suivante :

    Est-ce que les composantes de la matrice A sont bien devenues des nombres entiers ou c'est juste un affichage ?
    Si oui, comment transformer ces valeurs entières en valeurs réelles ? J'ai essayé float(A) mais ça ne fonctionne pas
    Essayer un truc qui n'est à priori pas prévu pour ce que vous voulez faire n'est pas une bonne méthode.
    D'abord, vous lisez la documentation sur les possibilités de convertion des types d'un array numpy, puis si vous ne comprenez pas ou n'arrivez pas à les mettre en œuvre les solutions proposées, vous pouvez alors venir exposer vos soucis ici.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 122
    Points : 66
    Points
    66
    Par défaut
    Bonjour et merci pour ta remarque pertinente. Cependant, j'ai cherché avant de venir exposer mes soucis ici. Si je viens ici c'est pour demander de l'aide aux personnes qui sont plus expérimentées que moi dans le domaine qui me pose des difficultés et qui veulent bien partager leur expérience. Quand on apprend à résoudre un problème, devant certaines difficultés, il n'est pas interdit d'essayer des choses qu'on connait déjà par ailleurs. Ceci est valable dans beaucoup de domaines si ce n'est dans tous les domaines. J'ai à ma disposition le livre "Apprenez à programmer en Python" de Vincent Le Goff, si avoir et/ou lire des bouquins était suffisant, personne ne fréquenterait les forums pour demander de l'aide.

    J'ai trouvé, avec l'aide des forumistes, la solution qui renvoie le résultat souhaité, le code est donné ci-dessous pour d'autres personnes qui seraient dans le besoin ou pour des éventuelles optimisations.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    import numpy as np
    valmin = 0.
    valmax = 100.
    npoints = 5 
    A = np.zeros((npoints, 3))
    # Calcul de delta (increment)
    delta = (valmax-valmin) / npoints
    vec_indices = np.arange(npoints) * delta
    # Remplacement de la deuxieme colonne de A par le vecteur vec_indices
    A[:, 1] = vec_indices
    # Affichage du resultats
    print 'A =', A
    print 'Type de la matrice A :', type(A)
    # Convertir la array numpy en list python pour la matrice A
    A=A.tolist()
    # Convert list of lists to tuple of tuples
    A=tuple(tuple(i) for i in A)
    # Affichage de A
    print 'A=', A
    # Affichage du type de A
    print 'type de la matrice A :', type(A)

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Modifier le nom d'une colonne d'une table existante
    Par fatati dans le forum Administration
    Réponses: 4
    Dernier message: 18/12/2006, 18h10

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