# EmpiricalDistributions.jl

A Julia package for empirical probability distributions that implement the Distributions.jl API.

This package currently provides uni- and multivariate binned distributions that can be created from StatsBase.jl histograms.

`UvBinnedDist`

, usually derived from a 1-dimensional histogram, represents a binned univariate continuous distribution:

```
using Distributions, StatsBase
X_uv = rand(Normal(2.0, 0.5), 10^5)
uvhist = fit(Histogram, X_uv)
using EmpiricalDistributions
uvdist = UvBinnedDist(uvhist)
uvdist isa Distribution{Univariate,Continuous}
```

The resulting distribution can be queried, used to generate random numbers, etc.:

```
mean(uvdist), var(uvdist)
maximum(uvdist), minimum(uvdist)
rand(uvdist, 5)
```

A binned distribution can be converted back to a histogram:

```
using LinearAlgebra
Histogram(uvdist) == normalize(uvhist)
```

`MvBinnedDist`

, usually derived from a multidimensional histogram, represents a binned multivariate continuous distribution:

```
X_mv = rand(MvNormal([3.5, 0.5], [2.0 0.5; 0.5 1.0]), 10^5)
mvhist = fit(Histogram, (X_mv[1, :], X_mv[2, :]))
mvdist = MvBinnedDist(mvhist)
mvdist isa Distribution{Multivariate,Continuous}
mean(mvdist), cov(mvdist)
rand(mvdist, 5)
```