Path: ...!news.mixmin.net!aioe.org!jVhmzutVZU+CfOePwZZQrw.user.46.165.242.75.POSTED!not-for-mail From: Lulu Newsgroups: fr.comp.lang.python Subject: Re: erreur matplotlib Date: Wed, 16 Mar 2022 15:57:43 +0100 Organization: koitess? Message-ID: References: <87fsnjxa6g.fsf@universite-de-strasbourg.fr.invalid> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: gioia.aioe.org; logging-data="11617"; posting-host="jVhmzutVZU+CfOePwZZQrw.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: slrn/1.0.3 (Linux) X-Notice: Filtered by postfilter v. 0.9.2 Bytes: 3606 Lines: 66 Le 15-03-2022, Alain Ketterlin a écrit : > Lulu writes: >> Le 15-03-2022, Lulu 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(). Ça m'apprendra a récupérer des scripts à droite ou à gauche sans analyser leur fonctionnement : je n'avais même pas conscience de manipuler des tableaux !! Merci encore pour ton aide et pour numpy.full(). > -- Alain.