gpt4 book ai didi

R - 时间序列的非线性滤波器 - 滤波器,重叠还是循环?

转载 作者:行者123 更新时间:2023-12-03 21:50:20 27 4
gpt4 key购买 nike

我有一个包含简单时间序列数据的向量(从 deSolve 矩阵中提取),用于测试目的可以是:

x <- c(1, 2, 3, 4, 5)

并想应用非线性滤波器
x[n]*x[n]-x[n-1]*x[n+1]

到除第一个和最后一个元素之外的向量的所有元素,因为过滤器不能应用于这两个元素(例如,当 x[n-1] 项遇到第一个元素或 x[n+1] 项遇到最后一个元素时)。这就是我的问题。

我尝试过的事情:
1) filter()命令需要一个线性滤波器(即,没有滤波器系数的乘法)。
2) lapply()要求该函数适用于列表的所有元素。

循环是唯一的选择吗?

谢谢你的帮助,
凯里

最佳答案

可以用循环或应用或矢量化来完成。

> x <- c(1, 2, 3, 4, 5)
> r <- NA
> for (n in 2:length(x)) r[n] <- x[n]*x[n]-x[n-1]*x[n+1]
> (r)
[1] NA 1 1 1 NA
>
> r <- NA
> lapply(2:length(x),function(n) r[n] <<- x[n]*x[n]-x[n-1]*x[n+1])
[[1]]
[1] 1

[[2]]
[1] 1

[[3]]
[1] 1

[[4]]
[1] NA

> (r)
[1] NA 1 1 1 NA

> r <- NA
> r <- x^2 - c(NA,x[1:(length(x)-1)]) * c(x[2:length(x)],NA)
> (r)
[1] NA 1 1 1 NA

矢量化是最有效的,但代码更难破译
> x <- runif(50000)
>
> r <- NA
> system.time(for (n in 2:length(x)) r[n] <- x[n]*x[n]-x[n-1]*x[n+1])
user system elapsed
8.55 0.01 8.58
>
> r <- NA
> system.time(lapply(2:length(x),function(n) r[n] <<- x[n]*x[n]-x[n-1]*x[n+1]))
user system elapsed
11.36 0.00 11.39
>
> r <- NA
> system.time(r <- x^2 - c(NA,x[1:(length(x)-1)]) * c(x[2:length(x)],NA))
user system elapsed
0.01 0.00 0.01

关于R - 时间序列的非线性滤波器 - 滤波器,重叠还是循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5135977/

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