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()