是否有一个函数在Julia中创建滞后变量而不使用任何包?
具体来说,我想embed在Julia中模仿R的功能.
> embed(1:8, 3)
[,1] [,2] [,3]
[1,] 3 2 1
[2,] 4 3 2
[3,] 5 4 3
[4,] 6 5 4
[5,] 7 6 5
[6,] 8 7 6
Run Code Online (Sandbox Code Playgroud)
经过几个小时的浏览Julia手册,我放弃了在Julia寻找合适的功能.这个丑陋的功能(按R标准)是我到目前为止所拥有的.是否有任何内置功能或任何改进空间?
julia> function embed(x, k)
n = length(x)
m = zeros(n - k + 1, k)
for i in 1:k
m[:, i] = x[(k-i+1):(n-i+1)]
end
return m
end
embed (generic function with 1 method)
julia> embed(1:8,3)
6x3 Array{Float64,2}:
3.0 2.0 1.0
4.0 3.0 2.0
5.0 4.0 3.0
6.0 5.0 4.0
7.0 6.0 5.0
8.0 7.0 6.0
Run Code Online (Sandbox Code Playgroud)
您可以罢免zeros了cell跳过初始化.你也可以
embed(x,k) = hcat([x[i+k-1:-1:i] for i in 1:length(x)-k+1]...)'
Run Code Online (Sandbox Code Playgroud)
说明
[i+k-1:-1:i]和创建反向步幅索引forhcat使用...'编辑:假设length(x)⋙ k,你也可以使用:
embed(x,k) = hcat([x[k-i+1:length(x)-i+1] for i in 1:k]...)
Run Code Online (Sandbox Code Playgroud)
这给出了相同的结果,但迭代次数更少,因此分配更少.