首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对双参数函数进行操作的矢量化函数

对双参数函数进行操作的矢量化函数
EN

Stack Overflow用户
提问于 2019-05-19 16:53:51
回答 1查看 42关注 0票数 1

我有一个双参数函数(具有两个滞后的自协方差函数)需要向量化,但我无法将其输出为矩阵。我尽量避免使用for循环和所有类型的应用函数。

我在尝试Vectorizevectorize (新的)。例如,我想要一个5乘5的协方差矩阵。当我输入的时候

代码语言:javascript
复制
covmatrix(h1 = 1:5, h2 = 1:5) 

我只得到了对角线,而不是完整的矩阵。

代码语言:javascript
复制
x=arima.sim(n = 100   , list(ar = .5))
cov=function(h1,h2){
     (1/n)*sum((x[1:(n-h1-h2)]-mean(x))*(x[(1+h1):(n-h2)]-mean(x))*(x[(1+h1+h2):n]-mean(x)))
}
covmatrix=Vectorize(cov)

我期望的是一个矩阵,因为输入是一个双参数函数。

EN

回答 1

Stack Overflow用户

发布于 2019-05-19 17:26:36

您调用covmatrix的方式产生了正确的结果,只是不是您所期望的。该调用相当于

代码语言:javascript
复制
covmatrix(h1 = 1, h2 = 1)
covmatrix(h1 = 2, h2 = 2)

诸若此类。

为两个参数的每个组合调用函数的正确方法是使用outer

代码语言:javascript
复制
outer(1:5, 1:5, covmatrix)
#            [,1]         [,2]         [,3]         [,4]        [,5]
#[1,] -0.41601317 -0.370097057 -0.124465470 -0.047267383  0.11745561
#[2,] -0.47072758 -0.272059262 -0.029614627  0.088643875  0.02381160
#[3,] -0.30116584 -0.258246136 -0.061882282  0.090978006 -0.05854558
#[4,] -0.08414056 -0.066622517  0.008072885 -0.035487867 -0.06632959
#[5,]  0.18854949 -0.003135701 -0.160137172  0.008353789 -0.18484782

数据生成代码。

我将重复数据生成代码,但这一次设置RNG种子。

代码语言:javascript
复制
set.seed(1234)
x <- arima.sim(n = 100, list(ar = 0.5))

另外,在问题中,您缺少n <- 100

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56206212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档