在某些条件下创建二进制矩阵

cad*_*adv 2 r matrix

我试图创建一个给定的函数,mp返回具有m行和mxp列的矩阵。矩阵0p位置除外p(从(行数)开始)应为。

例如,给定m=4p=2,矩阵应类似于:

1    1    0    0    0    0    0    0
0    0    1    1    0    0    0    0
0    0    0    0    1    1    0    0
0    0    0    0    0    0    1    1
Run Code Online (Sandbox Code Playgroud)

我想处理大型矩阵。我知道如何使用其他编程语言(例如python)中的循环来执行此操作,但是我相信这应该是在R中执行此操作的一种更简单,更优雅的方法diag()

Aur*_*èle 5

apply()rep()函数应用于对角矩阵的每一行(或每一列,都相同):

t(apply(diag(m), 2, rep, each = p))

#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,]    1    1    0    0    0    0    0    0
# [2,]    0    0    1    1    0    0    0    0
# [3,]    0    0    0    0    1    1    0    0
# [4,]    0    0    0    0    0    0    1    1
Run Code Online (Sandbox Code Playgroud)


jog*_*ogo 5

此解决方案用于p=2更改行数:

m <- 4
d <- diag(m)
matrix(rbind(d,d), m)
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,]    1    1    0    0    0    0    0    0
# [2,]    0    0    1    1    0    0    0    0
# [3,]    0    0    0    0    1    1    0    0
# [4,]    0    0    0    0    0    0    1    1
Run Code Online (Sandbox Code Playgroud)

对于其他值p(根据A5C1D2H2I1M1N1O2R1T2T1的注释):

p <- 3; m <- 4
matrix(rep(diag(m), each = p), nrow = m, byrow = TRUE)
Run Code Online (Sandbox Code Playgroud)