# Not evently-spaced grids/ranges

**URL:** https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995
**Category:** New to Julia
**Tags:** question
**Created:** [April 10, 2019, 12:28pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995 "2019-04-10T12:28:32Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![drarnau](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/drarnau/32/4476_2.png) [@drarnau](https://discourse.julialang.org/u/drarnau)
#### Post date: [April 10, 2019, 12:28pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/1 "2019-04-10T12:28:32Z")

</div>

I need to generate a vector between 0 and 10 such that points are _concetrated_ around 5. Something like:

```julia
[0.0 2.0 3.5 4.5 5 5.5 6.5 8.0 10.0] 

```

Is there any built-in function or package to do something like this?

---

<div class="post-metadata">

### Author: ![mauro3](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mauro3/32/292_2.png) [@mauro3](https://discourse.julialang.org/u/mauro3)
#### Post date: [April 10, 2019, 12:43pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/2 "2019-04-10T12:43:14Z")

</div>

How about `[p for p in sort(2*randn(100).+5) if 0<=p<=10]`. Adjust `2` as needed.

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [April 10, 2019, 12:54pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/3 "2019-04-10T12:54:40Z")

</div>

Let’s generalize that grid:

```julia
function expanding_grid(mid, left, right, step, α)
    v = Vector{typeof(mid + α*step)}()
    # left half
    let s = step, a = mid - s
        while a ≥ left
            push!(v, a)
            s += α
            a -= s
        end
    end
    reverse!(v)
    push!(v, mid)
    let s = step, a = mid + s
        while a ≤ right
            push!(v, a)
            s += α
            a += s
        end
    end
    v
end

```

```julia
julia> expanding_grid(5, 0, 10, 0.5, 0.5)
9-element Array{Float64,1}:
  0.0
  2.0
  3.5
  4.5
  5.0
  5.5
  6.5
  8.0
 10.0

```

---

<div class="post-metadata">

### Author: ![drarnau](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/drarnau/32/4476_2.png) [@drarnau](https://discourse.julialang.org/u/drarnau)
#### Post date: [April 10, 2019, 1:30pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/4 "2019-04-10T13:30:00Z")

</div>

Thanks. I know how to write a function that generates that grid vector too. One could also think of using a logarithmic scale or even the normal distribution. My question is whether there is something _built-in_ that can be used.

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [April 10, 2019, 1:34pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/5 "2019-04-10T13:34:40Z")

</div>

> [@drarnau](#):
>
> My question is whether there is something _built-in_ that can be used.

Not that we know of, apparently.

This is something rather specialized, so while it is possible that some library would do something similar, I consider it unlikely. Maybe someone will point out something though.

But I am not sure why it is such an important consideration, and why you were expecting a “built-in” function (of which Julia has precious few — everything is gradually being moved into packages) for this.

---

<div class="post-metadata">

### Author: ![drarnau](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/drarnau/32/4476_2.png) [@drarnau](https://discourse.julialang.org/u/drarnau)
#### Post date: [April 10, 2019, 1:40pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/6 "2019-04-10T13:40:47Z")

</div>

Thank you.

The reason I’m asking is because I rather use something in a package/built-in than do it myself. The reason is that code from packages/built-in is reviewed by other people so it’s less likely to contain errors.

---

<div class="post-metadata">

### Author: ![rdeits](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rdeits/32/286_2.png) [@rdeits](https://discourse.julialang.org/u/rdeits)
#### Post date: [April 10, 2019, 3:01pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/7 "2019-04-10T15:01:48Z")

</div>

> [@drarnau](#):
>
> packages/built-in is reviewed by other people so it’s less likely to contain errors.

Not necessarily a good assumption. Write _tests_ to make sure the code is correct; don’t assume that other people will do that for you.

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [April 10, 2019, 3:08pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/8 "2019-04-10T15:08:06Z")

</div>

I concur with @rdeits: test coverage is the best signal of code quality. Also, many Julia projects are single-person with occasional other contributors. Only major packages, `Base` and the standard libraries get a more thorough review for the whole codebase.

But for this specific function, you provided a test case already, so you are all set — just check that in your tests.

---

<div class="post-metadata">

### Author: ![drarnau](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/drarnau/32/4476_2.png) [@drarnau](https://discourse.julialang.org/u/drarnau)
#### Post date: [April 10, 2019, 3:16pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/9 "2019-04-10T15:16:14Z")

</div>

Any pointers on how to test code systematically and efficiently?

---

<div class="post-metadata">

### Author: ![aaowens](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aaowens/32/12101_2.png) [@aaowens](https://discourse.julialang.org/u/aaowens)
#### Post date: [April 10, 2019, 3:22pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/10 "2019-04-10T15:22:27Z")

</div>

Maybe the nodes from a guassian quadrature? These start from -1 to 1 centered around 0, but you can scale and shift them.

```julia
julia> using FastGaussQuadrature

julia> nodes, weights = gausslegendre( 10 )
([-0.973907, -0.865063, -0.67941, -0.433395, -0.148874, 0.148874, 0.433395, 0.67941, 0.865063, 0.973907], [0.0666713, 0.149451, 0.219086, 0.269267, 0.295524, 0.295524, 0.269267, 0.219086, 0.149451, 0.0666713])

julia> nodes5 = 5nodes .+ 5
10-element Array{Float64,1}:
 0.13046735741414128
 0.6746831665550772 
 1.6029521585048778 
 2.8330230293537637 
 4.255628305091844  
 5.744371694908156  
 7.166976970646236  
 8.397047841495123  
 9.325316833444923  
 9.86953264258586  

```

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [April 10, 2019, 3:22pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/11 "2019-04-10T15:22:53Z")

</div>

[https://docs.julialang.org/en/v1/stdlib/Test/](https://docs.julialang.org/en/v1/stdlib/Test/)

---

<div class="post-metadata">

### Author: ![aaowens](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/aaowens/32/12101_2.png) [@aaowens](https://discourse.julialang.org/u/aaowens)
#### Post date: [April 10, 2019, 5:06pm UTC](https://discourse.julialang.org/t/not-evently-spaced-grids-ranges/22995/12 "2019-04-10T17:06:25Z")

</div>

Oops, that was actually concentrated at the edges. Use `guasshermite` instead.

```julia
julia> nodes, weights = gausshermite( 10 )
([-3.43616, -2.53273, -1.75668, -1.03661, -0.342901, 0.342901, 1.03661, 1.75668, 2.53273, 3.43616], [7.64043e-6, 0.00134365, 0.0338744, 0.240139, 0.610863, 0.610863, 0.240139, 0.0338744, 0.00134365, 7.64043e-6])

julia> nodes10 = (nodes .- minimum(nodes)) ./ (maximum(nodes)/(10/2))
10-element Array{Float64,1}:
  0.0               
  1.3145890707624264
  2.4438266847577346
  3.491614046470373 
  4.501039801469247 
  5.498960198530754 
  6.508385953529628 
  7.556173315242267 
  8.685410929237573 
 10.0  

```
