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 :

Comment faire comprendre à une liste que ses valeurs sont des réelles ?


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 55
    Points
    55
    Par défaut Comment faire comprendre à une liste que ses valeurs sont des réelles ?
    Bonjour,

    je n'en peux plus, je n'arrive pas à faire comprendre à mes listes (extraites d'un fichier .csv) que les valeurs sont des réelles et non une chaine de caractères.
    Voici ma liste affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [('0.0000E+00', '0.0000E+00'), ('3.0904E-01', '-9.1531E-02'), ('1.7336E-01', '-2.6834E-01'), ('-4.1506E-02', '-3.1484E-01')
    les deux valeurs me donnent un nombre complexe A+Bj
    mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DataS21 = zip(RealS21, ImS21)
    UcDataS21 = zip(UcRealS21, UcImS21, CovS21)
    for nz in range(0, dimensionX):
        R, I = DataS21[nz]
        UR, UI, Cov = UcDataS21[nz]
        Z = R + I*1j
    voici le message d'erreur qu'il m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C:\Python27\python.exe "Rcalcul.py"
    Traceback (most recent call last):
      File "Rcalcul.py", line 177, in <module>
        Z = R + I*1j
    TypeError: can't multiply sequence by non-int of type 'complex'
    Pour info, je ne peux pas utiliser la simple fonction complex(), car par la suite de mon fichier j'en déduis une FFT inverse et j'en calcule l'incertitude par propagation des incertitudes.

    je vous remercie par avance de votre aide.

    Patricia

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Salut,

    Pourquoi pas passer par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    number = '3.0904E-01'
    print float(number)
    Ju

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Je soupçonne un autre problème, est-ce que ta liste fait partie des arguments d'une des deux fonctions zip de ton code ?

    Parce que ce n'est pas une liste de valeurs mais une liste de tuples qui contiennent des valeurs.

    Dans un cas pareil on fait comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for nz in range(0, dimensionX):
        R, I = DataS21[nz]
        UR, UI, Cov = UcDataS21[nz]
        print 'R:', R, type(R)
        print 'I:', I, type(I)
        Z = R + I*1j
    De toutes façons tu peux commencer par convertir ta liste comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> l = [('0.0000E+00', '0.0000E+00'), ('3.0904E-01', '-9.1531E-02'), ('1.7336E-01', '-2.6834E-01'), ('-4.1506E-02', '-3.1484E-01')]
    >>> v = [(float(i), float(j)) for i, j in l]
    >>> v
    [(0.0, 0.0), (0.30904, -0.091531), (0.17336, -0.26834), (-0.041506, -0.31484)]

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Bonjour

    On peut aussi utiliser le module decimal permettant d'avoir une précision exacte

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> l = [('5.678E-01', '7.825E-01')]
    >>> v=[(float(x), float(y)) for (x, y) in l]
    >>> v
    [(0.56779999999999997, 0.78249999999999997)]
    >>> import decimal
    >>> v=[(decimal.Decimal(x), decimal.Decimal(y)) for (x, y) in l]
    >>> v
    [(Decimal('0.5678'), Decimal('0.7825'))]
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 55
    Points
    55
    Par défaut Merci à tous
    Effectivement c'est extrait de zip...
    Donc je vais appliquer ce que préconise Vinss... mais je ne connaissais pas le module decimal qui me sera fortement utile.

    Merci encore

    Patricia

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/11/2010, 17h00
  2. [MySQL] Comment faire comprendre à un ORDER BY que -7 c'est plus petit que -2
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 18/06/2010, 11h50
  3. Réponses: 6
    Dernier message: 13/03/2009, 16h01
  4. Réponses: 5
    Dernier message: 28/08/2006, 18h11
  5. Réponses: 8
    Dernier message: 17/08/2006, 16h16

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