创建一个对矩阵的对角线求和的程序

Create a program that sums the diagonal of a matrix

我正在尝试创建一个程序来对我创建的矩阵的对角线求和。我使用了下面的代码,但我不明白我编写的代码有什么问题。

a <- c(1, 2, 3) 
b <- c(3, 5, 6)

x <- matrix(a, b, nrow=3, ncol=3)
x

for (i in 1:nrow(x)) {
  for (j in 1:ncol(x)) {
    if (i=j) {
      diags[i, j] <- sum(x[i, j])
    }
  }
}

这已经是很棒的代码了!但是,正如评论中所指出的,当您可能认为您正在对一个向量求和时,您正试图 sum 一个标量。您需要将 x[i, j] 的结果添加到当然为零的起始值。因此,首先创建值为零的 diags 并在循环的每次迭代中将结果添加到它。

注意: 我们使用 `==` 进行比较,在函数调用中进行赋值 =,在脚本中进行赋值 `<-`。最好使用 seq 函数,例如 seq_len(nrow(x)) 而不是 1:nrow(x);乍一看产量相同,但具有优势,例如如果 nrow(x) 为零。

diags <- 0

for (i in seq_len(nrow(x))) {
  for (j in seq_len(ncol(x))) {
    if (i == j) {
      diags <- diags + x[i, j]
    }
  }
}
diags
# [1] 9

正在使用 diag 函数进行检查。

sum(diag(x))
# [1] 9

数据:

我使用了一个稍微不同的矩阵,它不是那么对称并且具有更多可区分的值。

x <- matrix(1:9 , nrow=4, ncol=3)