在R中,我试图为两个矩阵(AxB)编程Kronecker乘积计算器。我可以得到每个A子指标x所有B矩阵元素的乘积。这就得到了四个矩阵。我需要结合第一个和第二个矩阵,以及第三和第四个矩阵。然后结合这两个矩阵。我怎么能这么做呢?
K = function(A,B){
nfila = nrow(A)*nrow(B)
ncolum = ncol(A)*ncol(B)
m = matrix(NA, nrow = nfila, ncol = ncolum)
for(j in 1:ncol(A)){
for(i in 1:nrow(A)){
s = print(A[j,i]*B)
}
}
}
A=matrix(1:4, nrow=2, byrow=TRUE)
B=matrix(5:8, nrow=2, byrow=TRUE)
K(A,B)
创建一个列表来存储输出。
K = function(A,B){
res <- vector('list', ncol(A))
for(j in 1:ncol(A)){
s <- vector('list', nrow(A))
for(i in 1:nrow(A)){
s[[i]] = A[j,i]*B
}
res[[j]] <- do.call(cbind, s)
}
do.call(rbind, res)
}
A=matrix(1:4, nrow=2, byrow=TRUE)
B=matrix(5:8, nrow=2, byrow=TRUE)
K(A,B)
# [,1] [,2] [,3] [,4]
#[1,] 5 6 10 12
#[2,] 7 8 14 16
#[3,] 15 18 20 24
#[4,] 21 24 28 32
这里也可以用lapply
K = function(A,B){
do.call(rbind, lapply(seq(nrow(A)), function(x)
do.call(cbind, lapply(A[x, ], `*`, B))))
}