在R中创建一个特定的矩阵

con*_*ion 3 r matrix

有没有人知道在R中创建如下的矩阵的快速方法

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    2    2    2
[3,]    1    2    3    3
[4,]    1    2    3    4
Run Code Online (Sandbox Code Playgroud)

上面的矩阵是4x4,我想创建类似10000x10000的东西.

flo*_*del 13

你可以做:

N <- 4
m <- matrix(nrow = N, ncol = N)
m[] <- pmin.int(col(m), row(m))
Run Code Online (Sandbox Code Playgroud)

或@dickoa建议的较短版本:

m <- outer(1:N, 1:N, pmin.int)
Run Code Online (Sandbox Code Playgroud)

这些也有效并且都更快:

m <- pmin.int(matrix(1:N, nrow = N, byrow = TRUE),
              matrix(1:N, nrow = N, byrow = FALSE))

m <- matrix(pmin.int(rep(1:N, each = N), 1:N), nrow = N)
Run Code Online (Sandbox Code Playgroud)

最后,这是一个可爱的使用矩阵产品,但它很慢:

x <- matrix(1, N, N)
m <- lower.tri(x, diag = TRUE) %*% upper.tri(x, diag = TRUE)
Run Code Online (Sandbox Code Playgroud)

请注意,R的10k×10k矩阵看起来很大,我希望你的内存不会用完.

  • 这个衬里也应该做到这一点`外部(1:4,1:4,pmin)` (10认同)
  • 另外,如果你只使用整数,`pmax.int()`可能会更快. (3认同)