Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/02/2012, à 00:32

cbrunos

[Python] Comment préserver mes variables?

Bonjour à tous!

Je suis en train de traduire un algorithme de matlab vers python/scipy qui prend 4 matrices (ou arrays dans matlab) et qui ensuite en renvoie 4, après les avoir manipulées. Dans matlab, je rentre les matrices A, B, Q, Z et j'obtiens des matrices E, O, C, T. Après avoir lancé le script, mes matrices de départs restent inchangées. Cela n'est pas le cas avec python. J'obtiens les mêmes matrices E, O, C, T que dans matlab (donc c'est déjà pas mal), mais mes matrices A, B, Q et Z de départ sont modifiées (et égales à E, O, C, T).

Voici les matrices que j'utilise:

 from scipy import array

A = array([[3.,2.,1.],[8.,12.,93.],[13.,29.,51.]])

B = array([[5.,1.,9.],[82.,2.,37.],[17.,19.,21.]])

Q = array([[5.,2.,11.],[83.,178.,13.],[73.,9.,251.]])

Z = array([[0.87785,0.98719,0.87691],[0.98913,0.67625,0.7897],[0.8767,0.1211,0.2122]])

et voici mon code: lien pastebin que j'appelle comme suit, depuis ipython:

%run qzswitch.py

E,O,C,T=qzswitch(2,A,B,Q,Z)

je suppose que la partie où je fais mon erreur est à la fin, à partir de la ligne 68, vu que je manipule mes arrays directement. Dans matlab, c'est écrit de la même façon, mais comme dit les matrices de départ restent les mêmes.

Quelqu'un a-t-il une idée de comment je peux préserver mes matrices?

P.S.: et si en lisant mon code, vous avez d'autres conseils à me donner, n'hésitez surtout pas, je suis encore débutant et je veux apprendre le plus possible!

Un grand merci à ceux qui prendront le temps de répondre!


Je recommande pcubuntoo!

Hors ligne

#2 Le 27/02/2012, à 00:39

Haleth

Re : [Python] Comment préserver mes variables?

Fait des copies, et travail dessus.
Il me semble que les paramètres sont toujours par pointeur, en python.


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 27/02/2012, à 00:47

cbrunos

Re : [Python] Comment préserver mes variables?

Est-ce que je peux inclure la copie des paramètres directement dans le script? Ou est-ce que ça ne changera rien?


Je recommande pcubuntoo!

Hors ligne

#4 Le 02/03/2012, à 18:51

VinsS

Re : [Python] Comment préserver mes variables?

Salut,

Tu as probablement fais ce que l'on appelle des 'swallow copies', des copies superficielles, c'est à dire que python n'a pas créé de nouvel objet mais a collé une seconde référence au même objet.

Ce que  matlab modifie est bien le même objet de départ.

Il faut donc créer des 'deep copies', je suppose que tes objets python sont des listes, il suffit de faire:

myList_b = my_list_a[:]

maintenant tu peux utiliser my_list_b sans craindre pour l'original.


Vincent
Oqapy      Qarte      PaQager

Hors ligne

#5 Le 02/03/2012, à 19:06

pingouinux

Re : [Python] Comment préserver mes variables?

Salut,

VinsS #4 a écrit :

Tu as probablement fais ce que l'on appelle des 'swallow copies'

Pour info, il s'agit de shallow copies.

Hors ligne

#6 Le 02/03/2012, à 19:30

VinsS

Re : [Python] Comment préserver mes variables?

Bien vu, merci.


Vincent
Oqapy      Qarte      PaQager

Hors ligne