*kf
by An Uncommon Lab

pmfdraw

Draws samples from a probability mass function defined by an array of discrete probabilities.

indices = pmfdraw(p)
indices = pmfdraw(p, n)

Inputs

p

Array defining a probability mass function

n

Number of draws to make (defaults to the length of p)

Outputs

indices

Random draws corresponding to indicies of p

Example

We'll create a 3-element probability distribution, where the first element occurs 25% of the time, the second element occurs 40% of the time, and the third element occurs 35% of the time.

p = [0.25 0.4 0.35];

We can make 1000 random draws from this distribution. Approximately 25% will be 1, 40% will be 2, and 35% will be 3.

indices = pmfdraw(p, 1000);

Let's see how we did:

sum(indices == 1)/1000
sum(indices == 2)/1000
sum(indices == 3)/1000
ans =
    0.2490
ans =
    0.4030
ans =
    0.3480

Particle filters use discrete probabilities as "weights" for each particle, so that particles that produce predictions of the observation that are consistent with the true measurement end up with a higher probability. These most-likely particles are more likely to be selected during resampling, resulting in a clustering of particles near high-probability areas of the state space. This function is useful to randomly draw the particles to select according to their individual "probabilities".

See Also

bf, mnddraw

Table of Contents

  1. Inputs
  2. Outputs
  3. Example