gpt4 book ai didi

R函数式编程: using apply family to calculate kernel matrix for gaussian processes

转载 作者:行者123 更新时间:2023-11-30 08:42:06 24 4
gpt4 key购买 nike

我的最小工作示例

这是我的最小工作示例(注意我已经简化了数学)。假设我有一个包含两个变量的函数,其中 x 和 y 是相同维度的两个向量。

kernel_func <- function(x, y){
return(sum((x - y)^2))
}

我还有两个行数不同但列数相同的矩阵。

  • 维度为 n 乘以 d 的矩阵 X
  • 维度为 m 乘以 d 的矩阵 Y

现在我想获得一个矩阵,称之为K,其i,j元素是通过传递X第i行来计算的code> 作为 kernel_func 的第一个参数,Y 的第 j 行作为第二个参数。那就是

kernel_func(X[i, ], Y[j, ])

如何编写一段简洁的代码来执行此操作,希望使用 applylapplymapply 或类似的代码?

愚蠢的MWE

创建具有相同列数的两个矩阵

X = matrix(1:9, nrow=3, ncol=3)
Y = matrix(1:12, nrow=4, ncol=3)

用零初始化K矩阵

K <- matrix(0, nrow(X), nrow(Y))

使用双循环创建矩阵

for (i in rep(1:nrow(X), 4)){
for (j in 1:nrow(Y)) {
K[i, j] = kernel_func(X[i, ], Y[j, ])
}
}

最佳答案

这里有两种实现方法:

  • 使用apply()解决方案:
K <- t(apply(X, 1, function(p) apply(Y, 1, function(q) kernel_func(p,q))))
  • 使用 expand.grid() 的解决方案:
K <- matrix(apply(expand.grid(1:nrow(X),1:nrow(Y)),1, 
function(k) kernel_func(X[k[1],],Y[k[2],])),nrow = nrow(X))

输出

> K
[,1] [,2] [,3] [,4]
[1,] 5 14 29 50
[2,] 2 5 14 29
[3,] 5 2 5 14

关于R函数式编程: using apply family to calculate kernel matrix for gaussian processes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59255269/

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