# Static array with uniform distribution

**URL:** <https://discourse.julialang.org/t/static-array-with-uniform-distribution/106961>\
**Category:** Statistics\
**Tags:** distributions, staticarrays, random\
**Created:** [November 30, 2023, 7:46pm UTC](https://discourse.julialang.org/t/static-array-with-uniform-distribution/106961 "2023-11-30T19:46:52Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![sand](https://avatars.discourse-cdn.com/v4/letter/s/b3f665/32.png) [@sand](https://discourse.julialang.org/u/sand)\
**Post date:** [November 30, 2023, 7:46pm UTC](https://discourse.julialang.org/t/static-array-with-uniform-distribution/106961/1 "2023-11-30T19:46:52Z")

</div>

Hello,

I would like to know how to generate a static array with a uniform distribution (-2, 2).

Here is an example:

```julia
using StaticArrays
using Distributions

@SVector(randn(5)) # works

rand(Uniform(-2, 2), 5) # works

@SVector(rand(Uniform(-2, 2), 5)) # does not work

```

---

<div class="post-metadata">

**Author:** ![DNF](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dnf/32/10191_2.png) [@DNF](https://discourse.julialang.org/u/DNF)\
**Post date:** [November 30, 2023, 8:00pm UTC](https://discourse.julialang.org/t/static-array-with-uniform-distribution/106961/2 "2023-11-30T20:00:32Z")

</div>

```julia
(rand(SVector{5, Float64}) .- 0.5) .* 4

```

should work.

---

<div class="post-metadata">

**Author:** ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)\
**Post date:** [November 30, 2023, 8:11pm UTC](https://discourse.julialang.org/t/static-array-with-uniform-distribution/106961/3 "2023-11-30T20:11:50Z")

</div>

> [@sand](#):
>
> `@SVector(rand(Uniform(-2, 2), 5)) # does not work`

> <https://github.com/JuliaArrays/StaticArrays.jl/issues/804>
>
> Here's an example taken from the Julia docs on random number generation \[here\](h…ttps://docs.julialang.org/en/v1/stdlib/Random/#Generating-values-from-a-type-1)
> \`\`\`julia
> struct Die
> nsides::Int
> end
> Random.rand(rng::AbstractRNG, ::Random.SamplerType{Die}) = Die(rand(rng, 4:20))
> Random.rand(rng::AbstractRNG, d::Random.SamplerTrivial{Die}) = rand(rng, 1:d\[\].nsides)
> Base.eltype(::type{Die}) = Int
> \`\`\`
> This lets us conveniently generate arrays of random dice,
> \`\`\`julia
> julia\> rand(Die,3)
> 3-element Array{Die,1}:
> Die(11)
> Die(17)
> Die(4)
> 
> \`\`\`
> or arrays of random dice rolls
> \`\`\`julia
> julia\> rand(Die(6), 3)
> 3-element Array{Int64,1}:
> 3
> 1
> 5
> 
> \`\`\`
> With StaticArrays we can generate random dice
> \`\`\`julia
> julia\> @SVector rand(Die, 3)
> 3-element SArray{Tuple{3},Die,1,3} with indices SOneTo{3}:
> Die(20)
> Die(10)
> Die(13)
> 
> \`\`\`
> but not random dice rolls
> \`\`\`julia
> julia\> @SVector rand(Die(6), 3)
> ERROR: ArgumentError: Static Array parameter T must be a type, got Die(6)
> Stacktrace:
> ...
> \`\`\`
> The same error occurs when using the samplers from Distributions.jl, for example.
