Иерархия типов

Все сэмплеры и распределения, входящие в этот пакет, организованы в иерархию типов, которая описывается ниже.

Sampleable

Корнем этой иерархии типов является Sampleable. Абстрактный тип Sampleable охватывает все типы объектов, из которых можно получать выборки, в частности сэмплеры и распределения. Формально тип Sampleable определен следующим образом.

abstract type Sampleable{F<:VariateForm,S<:ValueSupport} end

У него есть два параметра типа, которые определяют то, какие выборки можно делать из объекта.

Distributions.Sampleable
Base.rand(::Distributions.Sampleable)

VariateForm

Distributions.VariateForm

К подтипам VariateForm, определенным в Distributions.jl, относятся следующие типы.

Тип Одна выборка Несколько выборок

Univariate == ArrayLikeVariate{0}

скалярное число

Числовой массив произвольной формы, каждый элемент которого является выборкой

Multivariate == ArrayLikeVariate{1}

числовой вектор

Матрица, каждый столбец которой является выборкой

Matrixvariate == ArrayLikeVariate{2}

числовая матрица

Массив матриц, каждый элемент которого является матрицей выборок

ValueSupport

# Distributions.ValueSupportType

ValueSupport

Абстрактный тип, определяющий поддерживаемые элементы выборки.

Может быть либо Discrete, либо Continuous.

К подтипам ValueSupport, определенным в Distributions.jl, относятся следующие типы.

# Distributions.DiscreteType

Discrete <: ValueSupport

Этот тип представляет поддержку дискретной случайной величины.

Она является исчислимой. Например, это может быть конечное или исчислимое бесконечное множество, такое как множество натуральных чисел.

См. также: Continuous, ValueSupport

# Distributions.ContinuousType

Continuous <: ValueSupport

Этот тип представляет поддержку непрерывной случайной величины.

Она является неисчислимо бесконечной. Например, это может быть интервал на вещественной прямой.

См. также: Discrete, ValueSupport

Тип Тип элементов по умолчанию Описание Примеры

Discrete

Int

Выборки принимают исчислимое количество значений

,

Continuous

Float64

Выборки принимают неисчислимое количество значений

],

Множество выборок часто организуются в массив в зависимости от размерности.

Базовые возможности, предоставляемые поддерживающим выборку объектом, — получение информации о генерируемых выборках и получение выборок. В частности, для поддерживающих выборку объектов доступны следующие функции:

# Base.lengthMethod

length(s::Sampleable)

Длина каждой выборки. Всегда возвращает 1, если s является одномерным объектом.

# Base.sizeMethod

size(s::Sampleable)

Размер (т. е. форма) каждой выборки. Всегда возвращает (), если s является одномерным объектом, и (length(s),), если s является многомерным объектом.

# Distributions.nsamplesMethod

nsamples(s::Sampleable)

Количество значений, содержащихся в одной выборке из s. Множество выборок часто организуется в массив в зависимости от размерности.

# Base.eltypeMethod

eltype(::Type{Sampleable})

The default element type of a sample. This is the type of elements of the samples generated by the rand method. However, one can provide an array of different element types to store the samples using rand!.

# Base.randMethod

rand(::AbstractRNG, ::Sampleable)

Производит выборку из сэмплера и возвращает результат.

# Random.rand!Method

rand!(::AbstractRNG, ::Sampleable, ::AbstractArray)

Выполняет выборку на месте из сэмплера и сохраняет результат в указанном массиве.

Распределения

Тип Distribution, являющийся подтипом Sampleable и имеющий приведенное ниже определение, служит для хранения вероятностных распределений. Помимо поддержки выборки, распределение обычно обладает возможностью явного объединения области, функцией плотности вероятности и множеством других количественных параметров.

abstract type Distribution{F<:VariateForm,S<:ValueSupport} <: Sampleable{F,S} end
Distributions.Distribution

Для упрощения использования на практике введен ряд псевдонимов типов:

const UnivariateDistribution{S<:ValueSupport}   = Distribution{Univariate,S}
const MultivariateDistribution{S<:ValueSupport} = Distribution{Multivariate,S}
const MatrixDistribution{S<:ValueSupport}       = Distribution{Matrixvariate,S}
const NonMatrixDistribution = Union{UnivariateDistribution, MultivariateDistribution}

const DiscreteDistribution{F<:VariateForm}   = Distribution{F,Discrete}
const ContinuousDistribution{F<:VariateForm} = Distribution{F,Continuous}

const DiscreteUnivariateDistribution     = Distribution{Univariate,    Discrete}
const ContinuousUnivariateDistribution   = Distribution{Univariate,    Continuous}
const DiscreteMultivariateDistribution   = Distribution{Multivariate,  Discrete}
const ContinuousMultivariateDistribution = Distribution{Multivariate,  Continuous}
const DiscreteMatrixDistribution         = Distribution{Matrixvariate, Discrete}
const ContinuousMatrixDistribution       = Distribution{Matrixvariate, Continuous}

Все методы, применимые к Sampleable, также применимы к Distribution. API для распределений разной размерности различаются (подробные сведения см. в разделах об одномерных, многомерных и матричных распределениях).