# Sample StaticVectors with Distributions.jl

**URL:** <https://discourse.julialang.org/t/sample-staticvectors-with-distributions-jl/123792>\
**Category:** General Usage\
**Tags:** distributions, staticarrays\
**Created:** [December 12, 2024, 11:04pm UTC](https://discourse.julialang.org/t/sample-staticvectors-with-distributions-jl/123792 "2024-12-12T23:04:44Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Joaquin\_Rodriguez](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquin_rodriguez/32/202978_2.png) [@Joaquin\_Rodriguez](https://discourse.julialang.org/u/Joaquin_Rodriguez)\
**Post date:** [December 12, 2024, 11:04pm UTC](https://discourse.julialang.org/t/sample-staticvectors-with-distributions-jl/123792/1 "2024-12-12T23:04:44Z")

</div>

I need to generate some random vectors with a custom distribution, and I would like to use the Distributions.jl API. However, my vectors are small `StaticVector`s and sampling from a distribution returns plain `Vector`s.

As shown by @Elrod on [Creating random Static Vector by StaticVector.jl and Distributions.jl in a loop](https://discourse.julialang.org/t/creating-random-static-vector-by-staticvector-jl-and-distributions-jl-in-a-loop/78439), you can define a distribution using static vectors, but you still get dynamic vectors when sampling:

```julia
julia> using Distributions, StaticArrays
julia> dist2dN = MvNormal(@SVector([0., 0.]),10.0)
MvNormal{Float64, PDMats.ScalMat{Float64}, SVector{2, Float64}}(
dim: 2
μ: [0.0, 0.0]
Σ: [100.0 0.0; 0.0 100.0]
)
julia> rand(dist2dN)
2-element Vector{Float64}:
 -15.693466638813794
 -10.710701041361501

```

Is there a way to make `rand(my_sampler)` return an `SVector` or an `MVector`?

---

<div class="post-metadata">

**Author:** ![baggepinnen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/baggepinnen/32/693_2.png) [@baggepinnen](https://discourse.julialang.org/u/baggepinnen)\
**Post date:** [December 13, 2024, 9:56am UTC](https://discourse.julialang.org/t/sample-staticvectors-with-distributions-jl/123792/2 "2024-12-13T09:56:12Z")

</div>

You could use the in-place function `Random.rand!` and store the result in a preallocated array. You could convert this preallocated array to an SVector without incurring allocations.

---

<div class="post-metadata">

**Author:** ![Joaquin\_Rodriguez](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquin_rodriguez/32/202978_2.png) [@Joaquin\_Rodriguez](https://discourse.julialang.org/u/Joaquin_Rodriguez)\
**Post date:** [December 13, 2024, 10:03pm UTC](https://discourse.julialang.org/t/sample-staticvectors-with-distributions-jl/123792/3 "2024-12-13T22:03:04Z")

</div>

Upon further inspection, I realized that I didn’t actually need the Distributions.jl API. For my use case, it was better just to [Generate random values of custom type (Julia stdlib)](https://docs.julialang.org/en/v1/stdlib/Random/#Generating-random-values-of-custom-types).
