【问题标题】:Kronecker product function definition克罗内克积函数定义
【发布时间】:2021-02-12 23:49:14
【问题描述】:

我有这段代码来定义一个函数,该函数可用于执行 kronecker 乘积,但在不工作之后

kron <-  function(A,B){
nfila = nrow(A)*nrow(B)
ncolum = ncol(A)*ncol(B)
m = matrix(NA, nrow = nfila, ncol = ncolum)

for (i in 1:nfila){
  for (j in 1:ncol(A)){
    m[i,j]=(A[i,j]*B)
  }
}
   
return(m)}

我用了这两个矩阵

A <-  matrix(c(1, 2, 3, 1), nrow = 2, ncol =  2, byrow = TRUE)
B <-  matrix(c(0, 3, 2, 1), nrow = 2, ncol =  2, byrow = TRUE)

要检查 de 进程是否正常,它应该是正在运行的 kron(A,B) 必须等于 kronecker(A,B)

如果c&lt;-kronecker(A,B)m&lt;-kron(A,B)。然后,C==m

【问题讨论】:

    标签: r matrix product


    【解决方案1】:

    在 R 中你可以这样做:

    library(purrr)
    kron <- function(A, B){
    
     map(seq_len(nrow(A)), ~do.call("cbind", map(A[.x,], ~.x * B))) %>%
       do.call("rbind", .)
    }
    

    内循环(映射):将矩阵 A 行中的每个元素与矩阵 B 相乘。最后绑定列

    外循环(映射):通过矩阵A的行迭代内循环。最后绑定行

    您的代码的问题是 A[i,j]*B 是与 B 具有相同维度的矩阵,并且您想将其放在单个单元格 (i,j) 中。

    你可以将你的代码修改成这样:

    kron <-  function(A,B){
    
      m <- matrix(0, nrow = nrow(A)*nrow(B), ncol = ncol(A)*ncol(B))
      
      for (i in seq_len(nrow(A))){
        cur_rows <- seq_len(nrow(B)) + (i-1)*nrow(B)
        for (j in seq_len(ncol(A)))
          m[cur_rows, seq_len(ncol(B)) + (j-1)*ncol(B)] <- A[i,j]*B
      }
      
      m
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 2016-12-14
      • 1970-01-01
      • 2022-09-23
      • 2017-06-14
      • 2011-06-23
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多