Class: Numo::Random::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/numo/random/generator.rb

Overview

Generator is a class that generates random number with several distributions.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new(seed: 496)
x = rng.uniform(shape: [2, 5], low: -1, high: 2)

p x
# Numo::DFloat#shape=[2,5]
# [[1.90546, -0.543299, 0.673332, 0.759583, -0.40945],
#  [0.334635, -0.0558342, 1.28115, 1.93644, -0.0689543]]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(seed: nil, algorithm: 'pcg64') ⇒ Generator

Creates a new random number generator.

Parameters:

  • seed (Integer) (defaults to: nil)

    random seed used to initialize the random number generator.

  • algorithm (String) (defaults to: 'pcg64')

    random number generation algorithm.



28
29
30
31
# File 'lib/numo/random/generator.rb', line 28

def initialize(seed: nil, algorithm: 'pcg64') # rubocop:disable Lint/UnusedMethodArgument
  @algorithm = 'pcg64'
  @rng = PCG64.new(seed: seed)
end

Instance Attribute Details

#algorithmString

Returns random number generation algorithm.

Returns:

  • (String)


22
23
24
# File 'lib/numo/random/generator.rb', line 22

def algorithm
  @algorithm
end

Instance Method Details

#cauchy(shape:, loc: 0.0, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of random values according to the Cauchy (Lorentz) distribution.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.cauchy(shape: 100, loc: 0.0, scale: 1.0)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • loc (Float) (defaults to: 0.0)

    location parameter.

  • scale (Float) (defaults to: 1.0)

    scale parameter.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


118
119
120
121
122
# File 'lib/numo/random/generator.rb', line 118

def cauchy(shape:, loc: 0.0, scale: 1.0, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.cauchy(x, loc: loc, scale: scale)
  x
end

#chisquare(shape:, df:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of random values according to the Chi-squared distribution.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.chisquare(shape: 100, df: 2.0)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • df (Float)

    degrees of freedom, must be > 0.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


136
137
138
139
140
# File 'lib/numo/random/generator.rb', line 136

def chisquare(shape:, df:, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.chisquare(x, df: df)
  x
end

#discrete(shape:, weight:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX

Generates array consists of random integer values in the interval [0, n).

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new(seed: 42)
w = Numo::DFloat[0.1, 0.6, 0.2]
x = rng.discrete(shape: [3, 10], weight: w)

p x

# Numo::Int32#shape=[3,10]
# [[1, 1, 1, 1, 1, 1, 1, 1, 2, 1],
#  [0, 1, 0, 1, 1, 0, 1, 1, 2, 1],
#  [2, 1, 1, 1, 1, 2, 2, 1, 1, 2]]

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • weight (Numo::DFloat | Numo::SFloat)

    (shape: [n]) list of probabilities of each integer being generated.

  • dtype (Symbol) (defaults to: :int32)

    data type of random array.

Returns:

  • (Numo::IntX | Numo::UIntX)


80
81
82
83
84
# File 'lib/numo/random/generator.rb', line 80

def discrete(shape:, weight:, dtype: :int32)
  x = klass(dtype).new(shape)
  rng.discrete(x, weight: weight)
  x
end

#f(shape:, dfnum:, dfden:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of random values according to the F-distribution.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.f(shape: 100, dfnum: 2.0, dfden: 4.0)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • dfnum (Float)

    degrees of freedom in numerator, must be > 0.

  • dfden (Float)

    degrees of freedom in denominator, must be > 0.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


155
156
157
158
159
# File 'lib/numo/random/generator.rb', line 155

def f(shape:, dfnum:, dfden:, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.f(x, dfnum: dfnum, dfden: dfden)
  x
end

#lognormal(shape:, mean: 0.0, sigma: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of random values according to a log-normal distribution.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.lognormal(shape: 100, mean: 0.0, sigma: 1.0)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • mean (Float) (defaults to: 0.0)

    mean of normal distribution.

  • sigma (Float) (defaults to: 1.0)

    standard deviation of normal distribution.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


193
194
195
196
197
# File 'lib/numo/random/generator.rb', line 193

def lognormal(shape:, mean: 0.0, sigma: 1.0, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.lognormal(x, mean: mean, sigma: sigma)
  x
end

#normal(shape:, loc: 0.0, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of random values according to a normal (Gaussian) distribution.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.normal(shape: 100, loc: 0.0, scale: 1.0)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • loc (Float) (defaults to: 0.0)

    location parameter.

  • scale (Float) (defaults to: 1.0)

    scale parameter.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


174
175
176
177
178
# File 'lib/numo/random/generator.rb', line 174

def normal(shape:, loc: 0.0, scale: 1.0, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.normal(x, loc: loc, scale: scale)
  x
end

#randomFloat

Returns random number with uniform distribution in the half-open interval [0, 1).

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
v = rng.random

Returns:

  • (Float)


56
57
58
# File 'lib/numo/random/generator.rb', line 56

def random
  rng.random
end

#seedInteger

Returns the seed of random number generator.

Returns:

  • (Integer)


36
37
38
# File 'lib/numo/random/generator.rb', line 36

def seed
  rng.seed
end

#seed=(val) ⇒ Object

Sets the seed of random number generator.

Parameters:

  • val (Integer)

    random seed.



43
44
45
# File 'lib/numo/random/generator.rb', line 43

def seed=(val)
  rng.seed = val
end

#standard_t(shape:, df:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of random values according to the Student’s t-distribution.

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.standard_t(shape: 100, df: 8.0)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • df (Float)

    degrees of freedom, must be > 0.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


211
212
213
214
215
# File 'lib/numo/random/generator.rb', line 211

def standard_t(shape:, df:, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.standard_t(x, df: df)
  x
end

#uniform(shape:, low: 0.0, high: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat

Generates array consists of uniformly distributed random values in the interval [low, high).

Examples:

require 'numo/random'

rng = Numo::Random::Generator.new
x = rng.uniform(shape: 100, low: -1.5, high: 1.5)

Parameters:

  • shape (Integer | Array<Integer>)

    size of random array.

  • low (Float) (defaults to: 0.0)

    lower boundary.

  • high (Float) (defaults to: 1.0)

    upper boundary.

  • dtype (Symbol) (defaults to: :float64)

    data type of random array.

Returns:

  • (Numo::DFloat | Numo::SFloat)


99
100
101
102
103
# File 'lib/numo/random/generator.rb', line 99

def uniform(shape:, low: 0.0, high: 1.0, dtype: :float64)
  x = klass(dtype).new(shape)
  rng.uniform(x, low: low, high: high)
  x
end