Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lag and lead in Julia

Tags:

julia

I want to turn an array like this

[1,2,3,4,5]

into a lagged version

[missing,1,2,3,4] # lag 1
[missing,missing,1,2,3] # lag 2

or a led version

[2,3,4,5,missing] # lead 1
[3,4,5,missing,missing] # lead 2

As Julia is designed for scientific computing, there must be something like this, right?

like image 226
Georgery Avatar asked Oct 18 '25 14:10

Georgery


1 Answers

Add ShiftedArrays. See: https://discourse.julialang.org/t/ann-shiftedarrays-and-support-for-shiftedarrays-in-groupederrors/9162

Quoting from the above:

lag, lead functions, to shift an array and add missing (or a custom default value in the latest not yet released version) where the data is not available, or circshift for shifting circularly in a lazy (non allocating) way:

julia> v = [1.2, 2.3, 3.4]
3-element Array{Float64,1}:
 1.2
 2.3
 3.4

julia> lag(v)
3-element ShiftedArrays.ShiftedArray{Float64,Missings.Missing,1,Array{Float64,1}}:
  missing
 1.2
 2.3

Note the ShiftedArray version of lag keeps the array size the same. You might add a short function to make it behave the way you asked:

biglag(v, n) = lag(vcat(v, v[1:n]), n)
like image 74
Bill Avatar answered Oct 21 '25 04:10

Bill



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!