Re: erreur matplotlib

Liste des GroupesRevenir à fcl python 
Sujet : Re: erreur matplotlib
De : alain (at) *nospam* universite-de-strasbourg.fr.invalid (Alain Ketterlin)
Groupes : fr.comp.lang.python
Date : 15. Mar 2022, 21:55:35
Autres entêtes
Organisation : Université de Strasbourg
Message-ID : <87fsnjxa6g.fsf@universite-de-strasbourg.fr.invalid>
References : 1 2
User-Agent : Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
Lulu <lulu042@fry.fr.invalid> writes:

Le 15-03-2022, Lulu <lulu042@fry.fr.invalid> a écrit :
 Bonjour,
 
 [...]
 La ligne 37 de mon script cherche à tracer une constante : pour les 500
 valeurs de t, x0 = 0.4 (et mon script fonctionne si je commente cette
 ligne) :
 plot(t , x0, linewidth = ze_line_width)
 
 avec :
 x0 = u0(t)
 
 et :
 def u0(t) : return 0.4
 [...]
>
Je viens d'avoir l'idée de remplacer la fonction u0(t) par une fonction
qui dépend de t, mais avec une si faible variation que j'obtiens bien un
trait horizontal à 0.4 :
def u0(t) : return 0.4 + np.sin( 0.01 * np.pi * f1 * t /100)
>
Et ça marche !
>
Mais je cherche à comprendre mon erreur : pourquoi n'est-il pas aussi
simple qu'attendu de tracer une fonction constante ?

L'explication est dans le message d'erreur de ton précédent message :

8<-----------8<---------8<----------8<----------8<----------8<----------8<
Traceback (most recent call last):
[...]
ValueError: x and y must have same first dimension, but have shapes (500,) and (1,)
8<-----------8<---------8<----------8<----------8<----------8<----------8<

Ta fonction u0 (l'originale) ne crée pas un tableau, mais renvoie
simplement un flottant. Tes autres fonctions créent toutes des tableaux.
Par exemple :

13 def u1(t) : return np.sin( 2 * np.pi * f1 * t)

renvoie bien un tableau. Tu as l'impression de faire une bête
multiplication scalaire "2*..." mais en fait tu fais

    (... un flottant ...) * t

et comme t est un tableau, cela crée un nouveau tableau, dont chaque
élément est la valeur de l'élement correspondant de t multiplé par
(...). Merci la surcharge des opérateurs.

Tes fonctions u0, u1 ... ne sont pas des fonctions qui calculent
la nouvelle valeur d'un élement de tableau, ce sont des fonctions qui
calculent de nouveaux tableaux.

Sauf ta fonction u0 originale, qui renvoie un flottant. Ta modification
"marche" pour la même raison : ta (nouvelle) fonction u0 crée maintenant
un tableau, parce qu'un des opérandes de ta formule est un tableau. Tu
obtiendrais le même résultat en créant directement un tableau rempli
avec la constante, avec numpy.full().

-- Alain.

Date Sujet#  Auteur
15 Mar 22 * Re: erreur matplotlib3Lulu
15 Mar 22 `* Re: erreur matplotlib2Alain Ketterlin
16 Mar 22  `- Re: erreur matplotlib1Lulu

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal