【问题标题】:How to create nxn matrix with specific entry value如何创建具有特定条目值的 nxn 矩阵
【发布时间】:2020-02-24 23:00:00
【问题描述】:

如何创建一个 nxn 矩阵,其中单元格 (i, j) 中的值定义为 1/(i+j-1)

【问题讨论】:

    标签: r matrix cell


    【解决方案1】:

    使用.row.col 函数的解决方案。 (适用于 R 3.5.0 或更高版本)

    n <- 3L
    
    i <- .row(c(n, n))
    i
    #>      [,1] [,2] [,3]
    #> [1,]    1    1    1
    #> [2,]    2    2    2
    #> [3,]    3    3    3
    
    
    j <- .col(c(n, n))
    j
    #>      [,1] [,2] [,3]
    #> [1,]    1    2    3
    #> [2,]    1    2    3
    #> [3,]    1    2    3
    
    
    m <- 1/(i + j - 1)
    m
    #>           [,1]      [,2]      [,3]
    #> [1,] 1.0000000 0.5000000 0.3333333
    #> [2,] 0.5000000 0.3333333 0.2500000
    #> [3,] 0.3333333 0.2500000 0.2000000 
    

    对于早期的 R 版本:

    n <- 3L
    
    i <- row(diag(n))
    j <- col(diag(n))
    
    m <- 1/(i + j - 1)
    

    【讨论】:

    • 公平地说,.row.col 在 R 3.6.1 中进入了 base
    • @slava-kohut 更准确地说,从 3.6.1 开始,.row.col 的参数 dim 也可能是整数值的“double”。但是感谢这个,不知道这在早期版本中不起作用。我会更新我的答案。
    • @slava-kohut 抱歉,它们确实很新。看起来他们在 3.5.0 中输入了base cran.r-project.org/bin/windows/base/old/3.5.0/NEWS.R-3.5.0.html
    【解决方案2】:

    这是一个蛮力解决方案:

    create_matrix <- function(n){
     m <- matrix(NA, n, n)
     for (i in 1:n){
       for (j in 1:n){
         m[i,j] <- 1/(i+j-1)
       }
     }
     m
    }
    
    create_matrix(2)
    
       [,1]      [,2]
    [1,]  1.0 0.5000000
    [2,]  0.5 0.3333333
    

    您还可以使用结果矩阵是对称的这一事实(但我认为这不会更快):

    create_matrix_sym <- function(n){
     m <- matrix(NA, n, n)
     for (i in 1:n){
       for (j in 1:i){
         m[i,j] <- 1/(i+j-1)
       }
     }
     m[upper.tri(m)] <- m[lower.tri(m)]
     m
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用outer 创建这样的矩阵,即M &lt;- 1/(outer(1:n,1:n,"+")-1)

      【讨论】:

        猜你喜欢
        • 2022-12-12
        • 2014-07-15
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 2022-06-14
        • 2020-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多