我有一个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发布于 2019-08-14 06:52:46
您可能需要根据实际需要调整尺寸-
# 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"发布于 2019-12-05 09:36:54
要大体上回答这个问题,我最好建议使用R base的kronecker产品。它所做的只是将第一个矩阵的所有元素与整个第二个矩阵相乘(作为标量),并将其转换为组合维数的矩阵,就像您的例子一样。
举个例子:
D <- diag(1,4) # Identity matrix, in your case you should change 4 by 6
M <- matrix(1:4, 2, 2) # Matrix 2x2
kronecker(D,M) # Matrix you are looking for
#output
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 3 0 0 0 0 0 0
[2,] 2 4 0 0 0 0 0 0
[3,] 0 0 1 3 0 0 0 0
[4,] 0 0 2 4 0 0 0 0
[5,] 0 0 0 0 1 3 0 0
[6,] 0 0 0 0 2 4 0 0
[7,] 0 0 0 0 0 0 1 3
[8,] 0 0 0 0 0 0 2 4https://stackoverflow.com/questions/57486159
复制相似问题