【问题标题】:creating a matrix with a nested for loop创建一个带有嵌套 for 循环的矩阵
【发布时间】:2020-05-25 05:18:10
【问题描述】:

这是一个准备考试的练习题。我得到以下代码:

     W=matrix(1:16,byrow=T,ncol=4)
print(W)

fmat=function(W){
n=nrow(W)

      for (i in 1:n){
      for (j in 1:n){
        W[j,i]=W[i,j]+W[j,i]
      }
      }

      return(W)
}

print(fmat(W))

我们必须在纸上“运行”代码,然后通过在 R 中运行代码来检查我们的答案。我为 W 写出了正确的矩阵,但我得到了 fmat(W) 错误。 R 为我提供了 fmat(W) 的以下输出:

     [,1] [,2] [,3] [,4]
[1,]    2    9   15   21
[2,]    7   12   24   30
[3,]   12   17   22   39
[4,]   17   22   27   32

我写下 fmat(W) 等于:

     [,1] [,2] [,3] [,4]
[1,]    2    7   12   17
[2,]    7   12   17   22
[3,]   12   17   22   27
[4,]   17   22   27   32

这里到底发生了什么?我已经解释了函数来计算它,例如 w[2,1]=w[1,2]+w[2,1],即 2+5=7。

【问题讨论】:

    标签: r function for-loop matrix nested-loops


    【解决方案1】:

    在您的代码中,W 在嵌套的 for 循环中按列然后按行覆盖。

    为了可视化进度,您可以在赋值W[j,i] = W[i,j]+W[j,i]之前添加print(W),即,

    fmat=function(W){
      n=nrow(W)
      for (i in 1:n){
        for (j in 1:n){
          print(W)
          W[j,i]=W[i,j]+W[j,i]
        }
      }
      return(W)
    }
    
    

    这样

    > fmat(W)
         [,1] [,2] [,3] [,4]
    [1,]    1    2    3    4
    [2,]    5    6    7    8
    [3,]    9   10   11   12
    [4,]   13   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    2    3    4
    [2,]    5    6    7    8
    [3,]    9   10   11   12
    [4,]   13   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    2    3    4
    [2,]    7    6    7    8
    [3,]    9   10   11   12
    [4,]   13   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    2    3    4
    [2,]    7    6    7    8
    [3,]   12   10   11   12
    [4,]   13   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    2    3    4
    [2,]    7    6    7    8
    [3,]   12   10   11   12
    [4,]   17   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9    3    4
    [2,]    7    6    7    8
    [3,]   12   10   11   12
    [4,]   17   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9    3    4
    [2,]    7   12    7    8
    [3,]   12   10   11   12
    [4,]   17   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9    3    4
    [2,]    7   12    7    8
    [3,]   12   17   11   12
    [4,]   17   14   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9    3    4
    [2,]    7   12    7    8
    [3,]   12   17   11   12
    [4,]   17   22   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15    4
    [2,]    7   12    7    8
    [3,]   12   17   11   12
    [4,]   17   22   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15    4
    [2,]    7   12   24    8
    [3,]   12   17   11   12
    [4,]   17   22   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15    4
    [2,]    7   12   24    8
    [3,]   12   17   22   12
    [4,]   17   22   15   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15    4
    [2,]    7   12   24    8
    [3,]   12   17   22   12
    [4,]   17   22   27   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15   21
    [2,]    7   12   24    8
    [3,]   12   17   22   12
    [4,]   17   22   27   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15   21
    [2,]    7   12   24   30
    [3,]   12   17   22   12
    [4,]   17   22   27   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15   21
    [2,]    7   12   24   30
    [3,]   12   17   22   39
    [4,]   17   22   27   16
         [,1] [,2] [,3] [,4]
    [1,]    2    9   15   21
    [2,]    7   12   24   30
    [3,]   12   17   22   39
    [4,]   17   22   27   32
    

    【讨论】:

    • 代码是我的教授写的,他想让我们了解代码是如何到达输出的。我们应该查看代码并在纸上写出输出中的矩阵将是什么,然后用 R 检查我们的答案。我们可能会在考试中遇到类似的问题,所以我需要了解我如何用我的大脑和计算器计算 fmat(W),就像 R 使用提供的代码一样。
    • @Emily 看到我的更新,希望能帮助你理解
    猜你喜欢
    • 2018-05-31
    • 2022-07-19
    • 1970-01-01
    • 2018-01-16
    • 2020-07-20
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多