# Code from Chapter 15 of Machine Learning: An Algorithmic Perspective (2nd Edition)
# by Stephen Marsland (http://stephenmonika.net)
# You are free to use, change, or redistribute the code in any way you wish for
# non-commercial purposes, but please maintain the name of the original author.
# This code comes with no warranty of any kind.
# Stephen Marsland, 2008, 2014
# The Sampling-Importance-Resampling algorithm
import pylab as pl
import numpy as np
def p(x):
return 0.3*np.exp(-(x-0.3)**2) + 0.7* np.exp(-(x-2.)**2/0.3)
def q(x):
return 4.0
def sir(n):
sample1 = np.zeros(n)
w = np.zeros(n)
sample2 = np.zeros(n)
# Sample from q
sample1 = np.random.rand(n)*4
# Compute weights
w = p(sample1)/q(sample1)
w /= np.sum(w)
# Sample from sample1 according to w
cumw = np.zeros(len(w))
cumw[0] = w[0]
for i in range(1,len(w)):
cumw[i] = cumw[i-1]+w[i]
u = np.random.rand(n)
index = 0
for i in range(n):
indices = np.where(u