是否有功能在Julia中创建滞后变量而不使用任何包?
具体来说,我想模仿朱莉娅的R embed
函数。
> 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
经过几个小时的浏览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
答案 0 :(得分:5)
您可以解除cell
的zeros
以跳过初始化。你也可以
embed(x,k) = hcat([x[i+k-1:-1:i] for i in 1:length(x)-k+1]...)'
解释
[i+k-1:-1:i]
和for
hcat
...
的参数
'
编辑:假设length(x)
⋙k
,您还可以使用:
embed(x,k) = hcat([x[k-i+1:length(x)-i+1] for i in 1:k]...)
它给出相同的结果,但迭代次数较少,因此分配的次数较少。