r - R 函数式编程:使用应用族计算高斯过程的核矩阵
问题描述
我的最小工作示例
这是我的最小工作示例(注意我已经简化了数学)。假设我有两个变量的函数,其中x
和y
是相同维度的两个向量。
kernel_func <- function(x, y){
return(sum((x - y)^2))
}
我也有两个行数不同但列数相同的矩阵。
X
维n
时间矩阵d
Y
维m
时间矩阵d
现在我想获得一个矩阵,称为它K
,它的 i,j 元素是通过将i
第 th 行X
作为第一个参数传递给kernel_func
并将第j
th 行Y
作为第二个参数来计算的。那是
kernel_func(X[i, ], Y[j, ])
我如何编写一段简洁的代码来做到这一点,希望使用,apply
或类似的?lapply
mapply
愚蠢的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
推荐阅读
- javascript - GatsbyJS - 向 graphQL 添加变量
- r - 如何让 R 中的 raster() 函数舍入到指定范围的外部?
- swift - 将自定义 UIView 添加到视图控制器会导致它在情节提要中消失
- visual-studio - 如何将我的多项目解决方案正确发布到 Azure
- flutter - Dart:返回变量而不运行函数
- r - 问题:如何将文本中的日期表示为数字?
- apache-spark - 如何强制 avro writer 在 Spark Scala 数据帧中以 UTC 格式写入时间戳
- java - Android SAF重复(一)(二)文件在华为上创建
- node.js - Sequelize 模型文件中的外部字段引用
- react-native - 在 react-native-webrtc 中
只有视频来了,音频不工作