3. Manipuler les valeurs en Python#
On donne ici quelques exemples de manipulation des valeurs obtenues précédemment sous forme de listes ou de tableaux Numeric.
Numeric est un module Python optionnel (c’est à dire non inclus à la distribution de Python fournie sur www.python.org) mais indispensable pour utiliser Code_Aster , on peut donc faire import Numeric sur toutes installations de Code_Aster .
3.1. Avec des listes Python#
Les listes Python sont facilement manipulables en utilisant les boucles. Prenons l’exemple de la notice [U2.51.01] pour \(–10.<x<10.\) en \(100\) pas:
\(y=-1.5\) |
si \(\sin(x)<0\) |
\(y=-5.\) |
sinon |
On cherche donc à construire deux listes de réels, \(\mathrm{lx}\) et \(\mathrm{ly}\) .
Comme toujours en Python, il y a plusieurs moyens de faire, plus ou moins simplement, plus ou moins élégamment!
x0=-10.
pas=20./100
lx=[] |
ou bien |
lx=[x0+i*pas for i in range(101)] |
for i in range(101):
lx.append(x0+i*pas)
def f(x):
if sin(x)<0.:
return -1.5
else:
return -5.
ly=map(f, lx) |
qui applique la fonction \(f\) à tous les éléments de \(\mathrm{lx}\) |
On peut tracer cette courbe en utilisant les mots-clés ABSCISSE et ORDONNEE de IMPR_FONCTION (cf. [§ 4 ]).
3.2. Avec des tableaux Numeric#
La manipulation des données sous forme de tableaux Numeric est simplifiée par l’utilisation d’opérations très performantes (appelées ufunc ) sur le tableau entier (dans l’exemple suivant on utilise sin()). Numeric gère également les tableaux à plusieurs dimensions.
En reprenant l’exemple précédent:
from Numeric import *
lx = arrayrange(-10., 10.+0.2, 0.2, Float)
ly = array(map(f, lx))
ou bien sans utiliser f:
ly = -1.5*less(sin(lx), 0.) + (-5.)*(1.-less(sin(lx), 0.))
Notons que map() retourne une liste et non un tableau Numeric. La deuxième expression est entre 10et 20 fois plus rapide sur de très gros tableaux (\({10}^{5}\) – \({10}^{6}\) termes), ce qui est cependant assez peu souvent le cas des fonctions ou tables issues d’ Aster .
On peut tracer cette courbe en utilisant les mots-clés ABSCISSE et ORDONNEE de IMPR_FONCTION en prenant soin de convertir les tableaux Numeric en liste, par exemple (cf. [§ 4 ]):
ABSCISSE = lx.tolist()