gpt4 book ai didi

julia - 如何在 Julia 中创建滞后变量?

转载 作者:行者123 更新时间:2023-12-01 07:42:23 25 4
gpt4 key购买 nike

是否有一个函数可以在不使用任何包的情况下在 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 中寻找合适的功能。这个丑陋的函数(按照 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

最佳答案

您可以为 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参数/li>
  • 连接步幅(作为参数传递)
  • 使用'转置结果

编辑:假设 length(x)k,您还可以使用:

embed(x,k) = hcat([x[k-i+1:length(x)-i+1] for i in 1:k]...)

它给出相同的结果,但迭代次数较少,因此分配较少。

关于julia - 如何在 Julia 中创建滞后变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com