【发布时间】:2020-04-02 22:24:40
【问题描述】:
我的最小工作示例
这是我的最小工作示例(注意我已经简化了数学)。假设我有一个包含两个变量的函数,其中 x 和 y 是两个相同维度的向量。
kernel_func <- function(x, y){
return(sum((x - y)^2))
}
我还有两个行数不同但列数相同的矩阵。
- 矩阵
X的维度为n乘以d - 矩阵
Y的维度为m乘以d
现在我想获得一个矩阵,称之为K,其i,j 元素是通过将X 的ith 行作为第一个参数传递给kernel_func 和j 来计算的Y 的第 th 行作为第二个参数。那是
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(Y, 1, function(y) apply(X, 1, kernel_func, y))?
标签: r machine-learning functional-programming apply lapply