我试图创建一个给定的函数,m并p返回具有m行和mxp列的矩阵。矩阵0的p位置除外p(从(行数)开始)应为。
例如,给定m=4和p=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()。
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)
此解决方案用于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)