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