class RSampler::Multinomial

Multinomial

Used to sample samples in a multinomial distribution

A minial usage could be:

RSampler::Multinomial.sampling(prob, sample_num) # => an array of samples

Attributes

accum_prob[R]
total_num[R]

Public Class Methods

new(prob) click to toggle source
# File lib/rsampler/multinomial.rb, line 15
def initialize(prob)
  @total_num = prob.size
  @accum_prob = prob.inject([0.0]) do |accum_sum, ele| 
    accum_sum + [ accum_sum.last + ele] 
  end
end
sampling(prob, sample_num) click to toggle source
# File lib/rsampler/multinomial.rb, line 22
def self.sampling(prob, sample_num)
  self.new(prob).sampling(sample_num)
end

Public Instance Methods

sampling(sample_num) click to toggle source
# File lib/rsampler/multinomial.rb, line 26
def sampling(sample_num)
  Array.new(sample_num) { rand }.inject([]) do |res, ran| 
    res << @accum_prob.find_index {|ele| ele > ran} - 1
  end
end