Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Out[16]:
Python cuenta con un paquete para manejar nmeros aleatorios: random. Numpy tambin provee un
mdulo para lo mismo: numpy.random. En un mdulo de python este mdulo se puede importar de la
siguiente manera:
In [2]: import numpy.random as random
En las libretas de IPython tenemos este mdulo importado automaticamente, as que podemos omitir la
lnea anterior, y se puede utilizar el nombre random directamente. An ms, las funciones del mdulo
numpy.random estn importadas tambin.
Este mdulo contiene muchas funciones, como lo indica la documentacin del mismo. La primera
funcin que utilizaremos es rand. La funcin rand acepta mltiples argumentos de tipo entero y
devuelve un array con nmeros aleatorios distribuidos uniformemente en el intervalo [0, 1). El n-simo
argumento especifica cuantos elementos tendr el resultado en la n-sima dimensin. Por ejemplo, sin
argumentos la funcin devuelve un nmero real, no un array.
In [5]: rand()
Out[5]:
0.2948522668509709
Cuando se le pasa un solo argumento la funcin devuelve un array de una dimensin con tantos
elementos como el valor del argumento:
In [7]: array1 = rand(100)
array1
Out[7]:
array([ 0.86042958,
0.11982877,
0.90459994,
0.50012867,
0.23939382,
Out[7]:
array([ 0.86042958,
0.85945377,
0.89959196,
0.31222439,
0.3532621 ,
0.71587761,
0.98245212,
0.73118265,
0.85098181,
0.18134769,
0.60900508,
0.02506954,
0.92631893,
0.60203571,
0.21501653,
0.35890109,
0.17700521,
0.17291773,
0.94626691,
0.71146845,
0.11982877,
0.0843099 ,
0.85464747,
0.31422114,
0.01481433,
0.63283413,
0.57204995,
0.19807596,
0.74610299,
0.21464423,
0.71113451,
0.66386163,
0.97312886,
0.07179184,
0.1041074 ,
0.55831732,
0.04307611,
0.5515602 ,
0.64247289,
0.7888544 ,
0.90459994,
0.57102048,
0.49795208,
0.55160364,
0.06899619,
0.72027448,
0.20157833,
0.89376438,
0.25176204,
0.5736978 ,
0.20816306,
0.56114062,
0.75442341,
0.79012743,
0.53234235,
0.70125529,
0.43726711,
0.29189377,
0.91375992,
0.7576026 ,
0.50012867,
0.10681829,
0.75175593,
0.38605549,
0.7101838 ,
0.92460927,
0.8482856 ,
0.28910125,
0.70168444,
0.79254113,
0.49484541,
0.89493943,
0.02104746,
0.9862937 ,
0.85162438,
0.43579019,
0.73471963,
0.90826881,
0.80956887,
0.90819529,
0.23939382,
0.79911695,
0.28389981,
0.3969374 ,
0.25847932,
0.2076804 ,
0.13276008,
0.29094218,
0.13187107,
0.98795487,
0.07759344,
0.46278306,
0.13756306,
0.88497381,
0.66712256,
0.88388255,
0.58262215,
0.59926054,
0.65929853,
0.89439354])
array([[ 0.85938113,
[ 0.6310969 ,
[ 0.12645231,
0.18180842,
0.12703708,
0.92144645,
0.71750739],
0.0714772 ],
0.37694204]])
array([[ 0.12949035,
0.76276095],
[ 0.29488447,
],
[ 0.46079285,
0.92320943],
0.15303723,
0.79356053,
0.82453895,
0.28280531,
0.8526758 ,
0.32841885,
0.86997954,
0.93415309,
0.97265455,
0.2617546
[ 0.48957987,
0.42801597],
[ 0.92828127,
0.60298699]])
0.81257691,
0.81242181,
0.96195095,
0.90145906,
0.63353512,
0.4371138 ,
76
Adems la funcin acepta dos argumentos nombrados. El primero de ellos es high, que debe ser un
entero m, y cuando se especifica el resultado estar contenido en el intervalo [n, m) :
In [14]: randint(130, high=132)
Out[14]:
131
El tercer argumento es size, este argumento es una tupla de nmeros enteros que define la forma del
resultado, es decir, las dimensiones del array resultado y cuandos elementos tendr en cada
dimensin:
In [17]: forma4 = (10,8)
array4 = randint(130, high=140, size=forma4)
array4
Out[17]:
array([[132,
[135,
[131,
[133,
[132,
[137,
[136,
[136,
[134,
[130,
139,
133,
132,
135,
135,
136,
139,
139,
139,
130,
132,
138,
135,
132,
133,
131,
130,
131,
132,
134,
136,
132,
130,
136,
138,
132,
131,
135,
137,
131,
138,
136,
130,
133,
131,
135,
132,
132,
133,
134,
135,
134,
131,
130,
135,
133,
134,
138,
131,
138,
139,
131,
137,
130,
139,
133,
131,
130,
134,
130,
139],
135],
131],
135],
134],
133],
131],
136],
134],
132]])
Similar a randint es la funcin random_integers, la cual acepta los mismos argumentos que
randint, slo que en el caso en que slo se especifica el primer argumento n devuelve un entero en el
intervalo [1, n].
In [40]: random_integers(2, size=(10))
Out[40]:
array([2, 2, 1, 1, 2, 2, 1, 2, 2, 2])
Out[40]:
array([2, 2, 1, 1, 2, 2, 1, 2, 2, 2])
array([5, 5, 3, 3, 5, 3, 4, 2, 5, 2])
array([6,
3,
1,
6,
3,
4,
5,
2,
2,
3, 2, 2, 2, 5, 3, 4, 6, 6, 3, 6, 6, 2, 3, 2, 4, 6, 3, 5, 5, 6,
4, 6, 2, 6, 5, 5, 4, 4, 6, 6, 5, 1, 3, 1, 3, 3, 6, 4, 3, 4, 1,
1, 6, 2, 6, 4, 4, 5, 5, 1, 1, 3, 5, 5, 6, 5, 2, 2, 3, 4, 5, 4,
3, 1, 6, 3, 4, 4, 3, 1, 2, 1, 2, 5, 1, 4, 6, 4, 5, 5, 2, 3, 6,
6, 1, 1, 2, 6, 5, 1])
Ahora bien, cual ser la distribucin de los valores de los lanzamientos del primer dado? Si el dado no
est cargado entonces no hay razn para que un valor predomine sobre los otros, es decir, que la
probabilidad de que salga cualquier valor entre uno y seis es la misma.
Como visualizamos esta distribucin? Matplotlib cuenta con una funcin para visualizar la distribucin
de una serie de datos: hist.
La funcin hist
hist es una funcin que sirve para graficar un histograma. Un histograma es una representacin
grfica de una variable, en forma de barras, donde el rea de la barra es proporcional a la frecuencia
con que un valor particular de la variable se repite.
Para usar la funcin hist basta con pasarle un argumento que contenga los datos a graficar. La
frecuencia con que aparece cada dato es determinado por la misma funcin de manera automtica. As,
para graficar la distribucin de los valores del lanzamiento del primer dado ejecutamos
In [22]: SIZE = (6, 6)
rc('font', size=14)
fig1 = figure(figsize=SIZE)
title(u'Distribucin de los lanzamientos del primer dado')
xlabel(u'Valor del lanzamiento')
ylabel(u'Frecuencia')
hist(dado1)
Out[22]:
(array([ 16491.,
0., 16480.,
0., 16862., 16610.]),
array([ 1. , 1.5, 2. , 2.5, 3. ,
]),
<a list of 10 Patch objects>)
0.,
3.5,
16706.,
4. ,
4.5,
0.,
5. ,
16851.,
5.5,
6.
La grfica nos muestra que la frecuencia de cada lanzamiento es prcticamente la misma, salvo
pequeas variaciones. La frecuencia de cada valor est cerca del valor promedio para cada
lanzamiento:
In [23]: 100000/6
Out[23]:
16666
Qu sucede cuando tenemos dos dados lanzados simultneamente? En este caso se suman los
valores de ambos dado, por lo que los valores de los lanzamientos estarn dados por
In [25]: total = dado1 + dado2
y su distribucin es
In [26]: SIZE = (6, 6)
rc('font', size=14)
fig1 = figure(figsize=SIZE)
title(u'Distribucin de los lanzamientos de dos dados')
xlabel(u'Valor del lanzamiento')
ylabel(u'Frecuencia')
hist(total, bins=11)
Out[26]:
(array([
2740.,
5609.,
8161., 11053., 13914., 16812., 13960.,
11062.,
8508.,
5509.,
2672.]),
array([ 2.
,
2.90909091,
3.81818182,
4.72727273,
5.63636364,
6.54545455,
7.45454545,
8.36363636,
9.27272727, 10.18181818, 11.09090909, 12.
]),
<a list of 11 Patch objects>)
La distribucin del lanzamiento de dos dados es muy diferente. En este caso el valor que ms se
presenta es 7, y los valores 1 y 12 son los menos comunes. Esta distrbucin tan particular se conoce
como distrubucin normal, o distribucin gaussiana.
In [6]: Image(url='http://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Stand
Out[6]:
El histograma de los dados solo se extiende sobre el intervalo de 2 a 12, pero presenta un
comportamiento bastante similar al de la distribucin normal.
La funcin hist puede mostrar la frecuencia relativa en el eje y , es decir, la proporcion de los eventos
respecto al total. Esto se logra usando el argumento nombrado normed, el cual debe tener el valor True
para lograr este efecto:
In [14]: SIZE = (8, 8)
rc('font', size=14)
fig1 = figure(figsize=SIZE)
title(u'Distribucin de los lanzamientos de dos dados')
xlabel(u'Valor del lanzamiento')
ylabel(u'Frecuencia')
hist(total, bins=11, color='red', normed=True)
Out[14]:
5.63636364,
6.54545455,
9.27272727, 10.18181818,
<a list of 11 Patch objects>)
7.45454545,
11.09090909,
Ejercicios
Ejercicio 1
Grafique la distribucin del lanzamiento de tres, cuatro, cinco y seis dados.
In [ ]:
8.36363636,
12.
]),