gpt4 book ai didi

r - R中的向量化核函数

转载 作者:行者123 更新时间:2023-12-01 12:41:43 24 4
gpt4 key购买 nike

很容易构建高斯核函数,使其可以处理向量输入:

K_gaussian <- function(x){return(1/sqrt(2*pi)*(exp(-0.5*x*x)))}
K_gaussian(seq(-1,1,0.5))
# [1] 0.2419707 0.3520653 0.3989423 0.3520653 0.2419707

但是当我尝试编写代码时遇到了麻烦,例如,Epanechnikov 内核:

K_ep <- function(x){if(abs(x)>1){return(0)} else{return(3/4*(1-x*x))}}

因为 if 语句把事情搞砸了。例如,以下不提供矢量输出:

K_ep(seq(-2,2,0.25))
# [1] 0

Warning message:
In if (abs(x) > 1) { :
the condition has length > 1 and only the first element will be used

我该如何解决这个问题?

最佳答案

您有两个选项来向量化您的函数。由于您只有一个参数,因此这里最简单的选择是使用 sapply

K_ep(seq(-2,2,0.25))
sapply(seq(-2, 2, 0.25), K_ep)
## [1] 0.00000 0.00000 0.00000 0.00000 0.00000 0.32812 0.56250
## [8] 0.70312 0.75000 0.70312 0.56250 0.32812 0.00000 0.00000
## [15] 0.00000 0.00000 0.00000

但是,有时您想要对许多参数进行矢量化,而 sapply 无法再应用。您将需要 mapplyVectorize(包装器)

K_epvect <- Vectorize(K_ep, vectorize.args = "x")
K_epvect(seq(-2,2,0.25))
## [1] 0.00000 0.00000 0.00000 0.00000 0.00000 0.32812 0.56250
## [8] 0.70312 0.75000 0.70312 0.56250 0.32812 0.00000 0.00000
## [15] 0.00000 0.00000 0.00000

关于r - R中的向量化核函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23912500/

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