3
c                 @   sD  e e d ddZddlZejdej Zd6e e e e ddd	ZddljZ	d
d e
d7dD Ze	jedd eD ddd e	jedd eD ddd e	jedd eD ddd e	jedd eD ddd e	j  e	jd e	j j  e	j  e	j  d8e e e e dddZdd e
d9dD Ze	jedd eD ddd e	jedd eD ddd e	jed d eD ddd e	jed!d eD ddd e	jd"d# e	jd$ e	j  e	j j  e	j  d:e e e e e d&d'd(ZddlZe ed)d*d+Zee ed,d-d.Zdd/lmZ e eedd0d1d2Zd3d4 Zed5kr@e  dS );)xreturnc             C   s    | dk rdS | dk r| S dS dS )z>Returns the probability that a uniform random variable is <= x       N )r   r   r   o/var/dept/share/cheung/public_html/Courses/MyInterests/MachineLearning/DS-from-scratch/Y/scratch/probability.pyuniform_cdf   s
      r   r   N   r   )r   musigmar   c             C   s(   t j| | d  d |d  t|  S )Nr   )mathexpSQRT_TWO_PI)r   r	   r
   r   r   r   
normal_pdf
   s    r   c             C   s   g | ]}|d  qS )g      $@r   ).0r   r   r   r   
<listcomp>   s    r   2   c             C   s   g | ]}t |d dqS )r   )r
   )r   )r   r   r   r   r   r      s    -zmu=0,sigma=1)Zlabelc             C   s   g | ]}t |d dqS )r   )r
   )r   )r   r   r   r   r   r      s    z--zmu=0,sigma=2c             C   s   g | ]}t |d dqS )g      ?)r
   )r   )r   r   r   r   r   r      s    :zmu=0,sigma=0.5c             C   s   g | ]}t |ddqS )r   )r	   )r   )r   r   r   r   r   r      s    z-.zmu=-1,sigma=1zVarious Normal pdfsc             C   s$   dt j| | t jd |  d S )Nr   r   )r   erfsqrt)r   r	   r
   r   r   r   
normal_cdf   s    r   c             C   s   g | ]}|d  qS )g      $@r   )r   r   r   r   r   r       s    c             C   s   g | ]}t |d dqS )r   )r
   )r   )r   r   r   r   r   r   !   s    c             C   s   g | ]}t |d dqS )r   )r
   )r   )r   r   r   r   r   r   "   s    c             C   s   g | ]}t |d dqS )g      ?)r
   )r   )r   r   r   r   r   r   #   s    c             C   s   g | ]}t |ddqS )r   )r	   r   )r   )r   r   r   r   r   r   $   s       )ZloczVarious Normal cdfsh㈵>)pr	   r
   	tolerancer   c             C   sh   |dks|dkr$||t | |d  S d}d}x6|| |krb|| d }t|}|| k r\|}q.|}q.W |S )z,Find approximate inverse using binary searchr   r   )r   g      $@r   g      $)inverse_normal_cdfr   )r   r	   r
   r   Zlow_zZhi_zZmid_zZmid_pr   r   r   r   .   s    r   )r   r   c             C   s   t j  | k rdS dS )z7Returns 1 with probability p and 0 with probability 1-pr   r   )random)r   r   r   r   bernoulli_trialG   s    r   )nr   r   c                s   t  fddt| D S )z(Returns the sum of n bernoulli(p) trialsc             3   s   | ]}t  V  qd S )N)r   )r   _)r   r   r   	<genexpr>M   s    zbinomial.<locals>.<genexpr>)sumrange)r   r   r   )r   r   binomialK   s    r$   )Counter)r   r   
num_pointsr   c                s   fddt D }t|}tjdd |j D fdd|j D ddd   tj d  t t|t	|d } fd	d|D }tj
|| tjd
 dS )z<Picks points from a Binomial(n, p) and plots their histogramc                s   g | ]}t  qS r   )r$   )r   r    )r   r   r   r   r   S   s    z&binomial_histogram.<locals>.<listcomp>c             S   s   g | ]}|d  qS )g?r   )r   r   r   r   r   r   W   s    c                s   g | ]}|  qS r   r   )r   v)r&   r   r   r   X   s    g?z0.75)Zcolorr   c                s,   g | ]$}t |d   t |d    qS )g      ?)r   )r   i)r	   r
   r   r   r   a   s   z.Binomial Distribution vs. Normal ApproximationN)r#   r%   pltZbarkeysvaluesr   r   minmaxplottitle)r   r   r&   dataZ	histogramxsZysr   )r	   r   r&   r   r
   r   binomial_histogramQ   s    r2   c        	         s(  dd l } dd lG dd d| j  d fdd}d}d}d}jd xftdD ]Z}| }| }| jkrx|d7 }| jkr| jkr|d7 }| jks| jkrV|d7 }qVW td	||  td
||  d||   k odk n  std||   k odk n  stttddd}d S )Nr   c               @   s   e Zd ZdZdZdS )zmain.<locals>.Kidr   r   N)__name__
__module____qualname__BOYGIRLr   r   r   r   Kidl   s   r8   )r   c                  s   j  j jgS )N)choicer6   r7   r   )r8   r   r   r   
random_kidp   s    zmain.<locals>.random_kidi'  r   zP(both | older):zP(both | either): gQ?gp=
ף?g333333?gffffff?)r   r   c             S   s    d|   kodk n  rdS dS )Nr   r   r   )r   r   r   r   uniform_pdf   s    zmain.<locals>.uniform_pdf)	enumr   ZEnumseedr#   r7   printAssertionErrorfloat)	r<   r:   Z
both_girlsZ
older_girlZeither_girlr    ZyoungerZolderr;   r   )r8   r   r   maing   s*    

 $rA   __main__)r   r   i)r   r   i)r   r   r   )r@   r   r   r   pir   r   Zmatplotlib.pyplotZpyplotr)   r#   r1   r.   Zlegendr/   ZgcaclearcloseZclfr   r   r   intr   r$   collectionsr%   r2   rA   r3   r   r   r   r   <module>   sH   


  '
 