diff --git a/docs/src/starting.md b/docs/src/starting.md index 0a2f0972c..9d4331ff6 100644 --- a/docs/src/starting.md +++ b/docs/src/starting.md @@ -49,9 +49,9 @@ julia> rand(Normal(1, 2), 100) The package contains a large number of additional distributions of three main types: -* `Univariate` -* `Multivariate` -* `Matrixvariate` +* `Univariate == ArrayLikeVariate{0}` +* `Multivariate == ArrayLikeVariate{1}` +* `Matrixvariate == ArrayLikeVariate{2}` Each type splits further into `Discrete` and `Continuous`. diff --git a/docs/src/types.md b/docs/src/types.md index 461ceea51..f5d3aa91d 100644 --- a/docs/src/types.md +++ b/docs/src/types.md @@ -27,9 +27,9 @@ The `VariateForm` sub-types defined in `Distributions.jl` are: **Type** | **A single sample** | **Multiple samples** --- | --- |--- -`Univariate` | a scalar number | A numeric array of arbitrary shape, each element being a sample -`Multivariate` | a numeric vector | A matrix, each column being a sample -`Matrixvariate` | a numeric matrix | An array of matrices, each element being a sample matrix +`Univariate == ArrayLikeVariate{0}` | a scalar number | A numeric array of arbitrary shape, each element being a sample +`Multivariate == ArrayLikeVariate{1}` | a numeric vector | A matrix, each column being a sample +`Matrixvariate == ArrayLikeVariate{2}` | a numeric matrix | An array of matrices, each element being a sample matrix ### ValueSupport diff --git a/src/Distributions.jl b/src/Distributions.jl index 980e5a831..9196e8240 100644 --- a/src/Distributions.jl +++ b/src/Distributions.jl @@ -31,6 +31,7 @@ export # generic types VariateForm, + ArrayLikeVariate, ValueSupport, Univariate, Multivariate, diff --git a/src/common.jl b/src/common.jl index 407243285..f3ddf6ba6 100644 --- a/src/common.jl +++ b/src/common.jl @@ -1,13 +1,20 @@ ## sample space/domain """ -`F <: VariateForm` specifies the form of the variate or -dimension of a sample, univariate (scalar), multivariate (vector), matrix-variate (matrix). +`F <: VariateForm` specifies the form or shape of the variate or a sample. """ abstract type VariateForm end -struct Univariate <: VariateForm end -struct Multivariate <: VariateForm end -struct Matrixvariate <: VariateForm end + +""" +`F <: ArrayLikeVariate{N}` specifies the number of axes of a variate or +a sample with an array-like shape, e.g. univariate (scalar, `N == 0`), +multivariate (vector, `N == 1`) or matrix-variate (matrix, `N == 2`). +""" +abstract type ArrayLikeVariate{N} <: VariateForm end + +const Univariate = ArrayLikeVariate{0} +const Multivariate = ArrayLikeVariate{1} +const Matrixvariate = ArrayLikeVariate{2} """ `S <: ValueSupport` specifies the support of sample elements,