【问题标题】:how put kernel matrix in a diagonal of a matrix?如何将核矩阵放在矩阵的对角线上?
【发布时间】:2019-08-13 22:43:34
【问题描述】:

我有一个包含 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

【问题讨论】:

  • Matrix::bdiag(replicate(2, kernel, simple = FALSE))
  • 我收到此错误:没有将“函数”强制为“CsparseMatrix”的方法或默认值
  • sherek_66;好吧,似乎它使用的是 stats::kernel 函数,而不是您问题中的 kernel 对象。运行您问题中的代码,然后运行评论中的代码^^,它将起作用。

标签: r dataframe matrix


【解决方案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"

【讨论】:

    【解决方案2】:

    一般来说,要回答这个问题,我最好建议使用 R basekronecker 乘积。它所做的只是将第一个矩阵的所有元素(作为标量)乘以整个第二个矩阵,然后转换为一个组合维度的矩阵,就像你的情况一样。

    例如:

    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    4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      相关资源
      最近更新 更多