Class: Numo::Random::Generator
- Inherits:
-
Object
- Object
- Numo::Random::Generator
- Defined in:
- lib/numo/random/generator.rb
Overview
Generator is a class that generates random number with several distributions.
Instance Attribute Summary collapse
-
#algorithm ⇒ String
Returns random number generation algorithm.
Instance Method Summary collapse
-
#bernoulli(shape:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to the Bernoulli distribution.
-
#binomial(shape:, n:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to a binomial distribution.
-
#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.
-
#chisquare(shape:, df:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values according to the Chi-squared distribution.
-
#discrete(shape:, weight:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random integer values in the interval [0, n).
-
#exponential(shape:, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values with an exponential distribution.
-
#f(shape:, dfnum:, dfden:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values according to the F-distribution.
-
#gamma(shape:, k:, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values with a gamma distribution.
-
#geometric(shape:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to a geometric distribution.
-
#gumbel(shape:, loc: 0.0, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values according to the Gumbel distribution.
-
#initialize(seed: nil, algorithm: 'pcg64') ⇒ Generator
constructor
Creates a new random number generator.
-
#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.
-
#negative_binomial(shape:, n:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to a negative binomial distribution.
-
#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.
-
#poisson(shape:, mean: 1.0, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to the Poisson distribution.
-
#random ⇒ Float
Returns random number with uniform distribution in the half-open interval [0, 1).
-
#seed ⇒ Integer
Returns the seed of random number generator.
-
#seed=(val) ⇒ Object
Sets the seed of random number generator.
-
#standard_t(shape:, df:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values according to the Student's t-distribution.
-
#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).
-
#weibull(shape:, k:, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values with the Weibull distribution.
Constructor Details
#initialize(seed: nil, algorithm: 'pcg64') ⇒ Generator
Creates a new random number generator.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/numo/random/generator.rb', line 28 def initialize(seed: nil, algorithm: 'pcg64') # rubocop:disable Metrics/MethodLength @algorithm = algorithm.to_s @rng = case @algorithm when 'mt32' MT32.new(seed: seed) when 'mt64' MT64.new(seed: seed) when 'pcg32' PCG32.new(seed: seed) when 'pcg64' PCG64.new(seed: seed) else raise ArgumentError, "Numo::Random::Generator does not support '#{@algorithm}' algorithm" end end |
Instance Attribute Details
#algorithm ⇒ String
Returns random number generation algorithm.
22 23 24 |
# File 'lib/numo/random/generator.rb', line 22 def algorithm @algorithm end |
Instance Method Details
#bernoulli(shape:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to the Bernoulli distribution.
83 84 85 |
# File 'lib/numo/random/generator.rb', line 83 def bernoulli(shape:, p:, dtype: :int32) binomial(shape: shape, n: 1, p: p, dtype: dtype) end |
#binomial(shape:, n:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to a binomial distribution.
100 101 102 103 104 |
# File 'lib/numo/random/generator.rb', line 100 def binomial(shape:, n:, p:, dtype: :int32) x = klass(dtype).new(shape) rng.binomial(x, n: n, p: p) x end |
#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.
294 295 296 297 298 |
# File 'lib/numo/random/generator.rb', line 294 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.
312 313 314 315 316 |
# File 'lib/numo/random/generator.rb', line 312 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).
256 257 258 259 260 |
# File 'lib/numo/random/generator.rb', line 256 def discrete(shape:, weight:, dtype: :int32) x = klass(dtype).new(shape) rng.discrete(x, weight: weight) x end |
#exponential(shape:, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values with an exponential distribution.
155 156 157 158 159 |
# File 'lib/numo/random/generator.rb', line 155 def exponential(shape:, scale: 1.0, dtype: :float64) x = klass(dtype).new(shape) rng.exponential(x, scale: scale) x end |
#f(shape:, dfnum:, dfden:, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values according to the F-distribution.
331 332 333 334 335 |
# File 'lib/numo/random/generator.rb', line 331 def f(shape:, dfnum:, dfden:, dtype: :float64) x = klass(dtype).new(shape) rng.f(x, dfnum: dfnum, dfden: dfden) x end |
#gamma(shape:, k:, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values with a gamma distribution.
174 175 176 177 178 |
# File 'lib/numo/random/generator.rb', line 174 def gamma(shape:, k:, scale: 1.0, dtype: :float64) x = klass(dtype).new(shape) rng.gamma(x, k: k, scale: scale) x end |
#geometric(shape:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to a geometric distribution.
137 138 139 140 141 |
# File 'lib/numo/random/generator.rb', line 137 def geometric(shape:, p:, dtype: :int32) x = klass(dtype).new(shape) rng.geometric(x, p: p) x end |
#gumbel(shape:, loc: 0.0, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values according to the Gumbel distribution.
193 194 195 196 197 |
# File 'lib/numo/random/generator.rb', line 193 def gumbel(shape:, loc: 0.0, scale: 1.0, dtype: :float64) x = klass(dtype).new(shape) rng.gumbel(x, loc: loc, scale: scale) 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.
369 370 371 372 373 |
# File 'lib/numo/random/generator.rb', line 369 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 |
#negative_binomial(shape:, n:, p:, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to a negative binomial distribution.
119 120 121 122 123 |
# File 'lib/numo/random/generator.rb', line 119 def negative_binomial(shape:, n:, p:, dtype: :int32) x = klass(dtype).new(shape) rng.negative_binomial(x, n: n, p: p) 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.
350 351 352 353 354 |
# File 'lib/numo/random/generator.rb', line 350 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 |
#poisson(shape:, mean: 1.0, dtype: :int32) ⇒ Numo::IntX | Numo::UIntX
Generates array consists of random values according to the Poisson distribution.
211 212 213 214 215 |
# File 'lib/numo/random/generator.rb', line 211 def poisson(shape:, mean: 1.0, dtype: :int32) x = klass(dtype).new(shape) rng.poisson(x, mean: mean) x end |
#random ⇒ Float
Returns random number with uniform distribution in the half-open interval [0, 1).
67 68 69 |
# File 'lib/numo/random/generator.rb', line 67 def random rng.random end |
#seed ⇒ Integer
Returns the seed of random number generator.
47 48 49 |
# File 'lib/numo/random/generator.rb', line 47 def seed rng.seed end |
#seed=(val) ⇒ Object
Sets the seed of random number generator.
54 55 56 |
# File 'lib/numo/random/generator.rb', line 54 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.
387 388 389 390 391 |
# File 'lib/numo/random/generator.rb', line 387 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).
275 276 277 278 279 |
# File 'lib/numo/random/generator.rb', line 275 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 |
#weibull(shape:, k:, scale: 1.0, dtype: :float64) ⇒ Numo::DFloat | Numo::SFloat
Generates array consists of random values with the Weibull distribution.
230 231 232 233 234 |
# File 'lib/numo/random/generator.rb', line 230 def weibull(shape:, k:, scale: 1.0, dtype: :float64) x = klass(dtype).new(shape) rng.weibull(x, k: k, scale: scale) x end |