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 :

Numpy : copier un array dans un autre array


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut Numpy : copier un array dans un autre array
    Bonjour,

    Je débute avec Numpy et je crois ne pas avoir bien compris car je viens d'avoir une surprise !!

    Je crée 2 arrays Numpy data_x et data_y de forme identique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    data_x = numpy.ndarray(shape =(10),dtype=np.float)
    data_y = numpy.ndarray(shape =(10),dtype=np.float)
    dans data_x je mets 1.,2.,3. .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data_x =[1.,2.,3.,4.,5.,6.,7.,8.,9.,10.]
    ensuite je copie data_x dans data_y

    Jusque là tout va bien ...

    puis je change la dernière valeur de data_y

    Et là oh!! stupeur, je découvre que la dernière valeur de data_x a aussi été changée

    est ce que data_y = data_x crée une équivalence entre les 2 arrays?
    y a til une fonction copy que je n'ai pas trouvée?

    voici le code en entier :
    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
    import numpy as np
     
    data_x = np.ndarray(shape =(10),dtype=np.float)
    data_y = np.ndarray(shape =(10),dtype=np.float)
     
    data_x =[1.,2.,3.,4.,5.,6.,7.,8.,9.,10.]
    data_y = data_x 
    print "data_x"
    print data_x  # ici c'est ok
     
    data_y [9] = 25.
     
    print "data_x"  # et là data_x [9] a été changé !!!
    print data_x
    print "data_y"
    print data_y
    Si quelqu'un peut venir à mon secours j'apprécierai beaucoup.

    Bonne soirée

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Bonjour,
    C'est normal, lorsque tu fais:
    Tu ne copie pas les valeurs contenues dans data_x, mais l'objet numpy.ndarray Donc data_x et data_y pointent ensuite vers le même objet.
    C'est valable pour tous les objets.

    y a til une fonction copy que je n'ai pas trouvée?
    Exactement, il suffisait de taper "numpy copy" dans google (ce que j'ai fais).

    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
     
    data_x = np.ndarray(shape =(10),dtype=np.float)
     
    data_x = np.arange(10)
    data_y = np.copy(data_x)
     
    data_y[9] = 25
    print data_x
    print data_y
    Tu as maintenant 2 objets distinct.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Bonjour Nyko77,

    Merci pour ta réponse très claire.

    J'avais trouvé entre temps, mais j'ai préféré laisser ma question parce que je ne voyais pas la différence entre data_y = data_x et data_y = numpy.copy(data_x)

    J'ai eu raison car tu m'as donné l'explication, mieux vaut comprendre; je n'ai pas l'habitude de la programmation objet.

    Je profite de tes compétences pour te poser une autre question:
    quelle est la différence entre :

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numpy.put (data_y,9,25.)
    ?

    Est il préférable d'utiliser numpy.put ?

    Dans le même ordre d'idée:
    quelle est la différence entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     data_z = data_x * data_y
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     data_z = numpy.multiply (data_x,data_y)
    ?
    Merci encore et bonne nuit
    Chez moi il est déjà 9h05 du matin

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Il vaut mieux utiliser:
    si tu veux changer seulement 1 valeurs.

    Après quelques test le numpy.put est 17 fois plus lent, pour cette utilisation.

    Pour les multiplie, le temps de calcul est à peu près identique, je pense que lorsque tu fais a*b, ça appel la méthode numpy.multiply (à vérifié).
    Tu peux donc utiliser la méthode que tu préfères. Personnellement je trouve la méthode a*b plus clair et plus pratique.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/12/2013, 21h00
  2. [Tableaux] copier tout un array dans une autre variable
    Par XavierWRC dans le forum Langage
    Réponses: 3
    Dernier message: 06/01/2010, 17h07
  3. Récupération d'un array dans un autre array
    Par slake13 dans le forum Langage
    Réponses: 1
    Dernier message: 14/10/2009, 16h09
  4. Copier une texture dans une autre?
    Par supergrey dans le forum DirectX
    Réponses: 9
    Dernier message: 28/07/2004, 11h12
  5. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59

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