从较小的矩阵创建一个更大的矩阵

我有一个矩阵A,它是:

A <- matrix(c(1:15), byrow=T, nrow=5)
A
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12
[5,]   13   14   15

现在我想创建一个矩阵B,它是8×8维(或10×10,或15×15等),如下所示:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    2    3    0    0    0    0    0
[2,]    4    5    6    0    0    0    0    0
[3,]    7    8    9    0    0    0    0    0
[4,]   10   11   12    0    0    0    0    0
[5,]   13   14   15    0    0    0    0    0
[6,]    0    0    0    0    0    0    0    0
[7,]    0    0    0    0    0    0    0    0
[8,]    0    0    0    0    0    0    0    0

所以从A开始,我想将列和行添加到8×8维度,全部替换为零值…
任何的想法?
先感谢您!!

最佳答案
假设A至少有一行和一列,请尝试此操作:

B <- matrix(0, 8, 8)
B[1:nrow(A), 1:ncol(A)] <- A

或作为单一声明:

B <- "[<-"(matrix(0, 8, 8), 1:nrow(A), 1:ncol(A), value = A)

如果A可以有零行或零列,则使用seq_len(nrow(A))和seq_len(ncol(A))代替1:nrow(A)和1:ncol(A).

或者,即使在A具有零行或列的情况下,这仍然有效:

B <- matrix(0, 8, 8)
B[cbind(c(row(A)), c(col(A)))] <- A

要么

B <- "[<-"(matrix(0, 8, 8), cbind(c(row(A)), c(col(A))), value = A)

要么

B <- replace(matrix(0, 8, 8), cbind(c(row(A)), c(col(A))), A)

转载注明原文:从较小的矩阵创建一个更大的矩阵 - 代码日志