[ randint(0, 2) for i in range(20) ]
[ randrange(2) for i in range(20) ]
[ randrange(-12, 7, 4) for i in range(20) ]
Remarque : Dans beaucoup de structures finies (comme les listes, les ensembles finis, les graphes, etc.), il existe des fonctions de tirage uniforme déjà codées.
A = Zmod(17)
print(A)
print(A.random_element())
G = graphs.CompleteGraph(5)
show(G)
print(G.random_vertex())
Si l'on souhaite définir une variable aléatoire de distribution non-uniforme, on peut utiliser l'objet GeneralDiscreteDistribution(P) où P est la liste des probabilités de la distribution.
P = [0.2, 0.1, 0.7]
D = GeneralDiscreteDistribution(P)
[ D.get_random_element() for i in range(20) ]
La fonction uniform(a, b) permet de tirer uniformément dans l'intevalle $[a, b[$.
uniform(1, 7)
La fonction RealDistribution permet de définir quelques autres distributions. Par exemple, pour la distribution gaussienne centrée de variance sigma :
sigma = 1
G = RealDistribution("gaussian", sigma)
La fonction de densité de probabilité est distribution_function(), et la fonction de répartition est cum_distribution_function().
print(G.distribution_function(0), G.cum_distribution_function(0))
Pour la loi exponentielle, c'est un peu pénible, il faut passer par une loi plus générale appelée loi de Weibull, et fixer le second paramètre à $1$. Ainsi, pour la loi exponentielle de paramètre $\lambda = 0.5$ :
P = RealDistribution('weibull', [0.5, 1])
plot(P, xmin=0, xmax=4)
scipy.stats¶Sagemath contient relativement peu de fonctions de probabilités/statistiques. Si l'on souhaite une utilisation plus avancée, il est conseillé d'utiliser le logiciel R (qui est inclus dans Sagemath) ou le module stats de la bibliothèque scipy.
Le logiciel R est assez complexe que vous aurez l'occasion de découvrir si vous poursuivez dans l'analyse de données, les statistiques, etc.
Voyons rapidement ce que l'on peut effectuer avec scipy.stats.
Il faut d'abord importer la bibliothèque : import scipy.stats as sc. Puis, s'offre à nous une quantité importante de fonctions (voyez en tapant sc.<tab>). Par exemple pou r la loi binomiale avec $n = 12$ et $p = 0.2$ :
import scipy.stats as sc
b = sc.binom(12, 0.2)
bar_chart([b.pmf(k) for k in range(13)])
On voit que la fonction .pmf() permet d'obtenir la distribution de la loi. On peut également obtenir la fonction de répartition par .cdf() :
bar_chart([b.cdf(k) for k in range(13)])
Beaucoup d'autres valeurs sont disponibles : l'espérance par .mean() ou .expect(), la variance par .var(), la mediane par .median(), et les moments d'ordres quelconques par .moment(k).
Attention : les valeurs sont souvent arrondies et peut précises :
print(b.moment(2) - b.moment(1)**2, b.var())
Pour la loi normale centrée réduite :
c = sc.norm(0, 1)
plot(c.pdf, xmin=-4, xmax=4)