This is one of the 100 recipes of the IPython Cookbook, the definitive guide to high-performance scientific computing and data science in Python.

# 15.4. Computing exact probabilities and manipulating random variables¶

In [ ]:
from sympy import *
from sympy.stats import *
init_printing()


## Rolling dice¶

Let's roll two dices X and Y.

In [ ]:
X, Y = Die('X', 6), Die('Y', 6)


We can compute probabilities defined by equalities (with the Eq operator) or inequalities...

In [ ]:
P(Eq(X, 3))

In [ ]:
P(X>3)


Conditions can also involve multiple random variables...

In [ ]:
P(X>Y)


Conditional probabilities...

In [ ]:
P(X+Y>6, X<5)


## Continuous random variables¶

We can also work with arbitrary discrete or continuous random variables.

In [ ]:
Z = Normal('Z', 0, 1)  # Gaussian variable

In [ ]:
P(Z>pi)


We can compute expectancies and variances...

In [ ]:
E(Z**2), variance(Z**2)


as well as densities.

In [ ]:
f = density(Z)


This is a lambda function, it can be evaluated on a SymPy symbol:

In [ ]:
var('x')
f(x)


We can plot this density.

In [ ]:
%matplotlib inline
plot(f(x), (x, -6, 6));


SymPy.stats works by using integrals and summations for computing probabilistic quantities. For example, P(Z>pi) is:

In [ ]:
Eq(Integral(f(x), (x, pi, oo)),
simplify(integrate(f(x), (x, pi, oo))))


You'll find all the explanations, figures, references, and much more in the book (to be released later this summer).

IPython Cookbook, by Cyrille Rossant, Packt Publishing, 2014 (500 pages).