如何在Julia中创建滞后变量?
有没有一个函数可以在Julia中创建滞后变量而不使用任何包 具体来说,我想在Julia中模拟R的如何在Julia中创建滞后变量?,julia,Julia,有没有一个函数可以在Julia中创建滞后变量而不使用任何包 具体来说,我想在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中寻找合适的函数。
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
您可以取消
零
以跳过初始化。你也可以
embed(x,k) = hcat([x[i+k-1:-1:i] for i in 1:length(x)-k+1]...)'
解释
- 使用
和[i+k-1:-1:i]
为
- 使用
…
- 连接跨步(作为参数传递)
- 使用
“
k
,您还可以使用:
embed(x,k) = hcat([x[k-i+1:length(x)-i+1] for i in 1:k]...)
这会产生相同的结果,但迭代次数较少,因此分配的数量也较少。这真的是一种常见的操作吗?您说您编写的代码与R相比“难看”。但实际的R代码要么看起来像这样(而且可能很慢),要么(甚至更糟)是用C编写的。原始代码更可读,而且可能更快。但这是一个令人印象深刻的一行!请注意,您应该(几乎)永远不要使用命名糟糕的
单元格
数组,因为它们不允许Julia正确推断类型。但是,您的代码不会正确推断类型。