我有一个9200行和6列的数据集。我使用以下代码找到了该数据框的内核:
#kernel
library("kernlab", "v0.9-27")
D<-as.matrix(X1)
rbf <- rbfdot(sigma = 0.05)
kernel<-kernelMatrix(rbf, D)
现在,我想将其作为方矩阵的对角线。例如,假设内核矩阵为
K11 k12
k21 k22
我需要一个像这样的矩阵
K11 k12 0 0 0 0 0 0
k21 k22 0 0 0 0 0 0
0 0 K11 k12 0 0 0 0
0 0 k21 k22 0 0 0 0
0 0 0 0 K11 k12 0 0
0 0 0 0 K21 k22 0 0
0 0 0 0 0 0 K11 k12
0 0 0 0 0 0 K21 k22
答案 0 :(得分:1)
您可能必须根据实际需要调整尺寸-
# this is your kernel matrix
m1 <- matrix(c("K11","k12","k21","k22"), nrow = 2, ncol = 2, byrow = T)
# this is output matrix; change nrow and ncol as per needs
m2 <- matrix("0", nrow = 8, ncol = 8)
for(i in seq(1, nrow(m2), nrow(m1))) {
m2[i:(i+nrow(m1)-1), i:(i+nrow(m1)-1)] <- m1
}
m2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] "K11" "k12" "0" "0" "0" "0" "0" "0"
[2,] "k21" "k22" "0" "0" "0" "0" "0" "0"
[3,] "0" "0" "K11" "k12" "0" "0" "0" "0"
[4,] "0" "0" "k21" "k22" "0" "0" "0" "0"
[5,] "0" "0" "0" "0" "K11" "k12" "0" "0"
[6,] "0" "0" "0" "0" "k21" "k22" "0" "0"
[7,] "0" "0" "0" "0" "0" "0" "K11" "k12"
[8,] "0" "0" "0" "0" "0" "0" "k21" "k22"
答案 1 :(得分:0)
一般来说,要回答这个问题,我建议使用R kronecker
的{{1}}乘积。它所做的只是将第一个矩阵的所有元素(按标量)乘以整个第二个矩阵,然后转换为组合维的矩阵(如您的情况)。
例如:
base