4

假设我有一个除对角线外全为 0 的矩阵。

m <- matrix(ncol=3,nrow=3)
m[,1] <- c(1,0,0)
m[,2] <- c(0,1,0)
m[,3] <- c(0,0,1)

我可以使用什么逻辑检查来测试矩阵的上下三角形是否为零?

4

3 回答 3

9
all(m[lower.tri(m)] == 0, m[upper.tri(m)] == 0)
于 2012-06-15T20:20:21.947 回答
2

这是@GregaKešpret 出色解决方案的一个略短的替代方案:

m <- diag(11:13)
m

all(m[!diag(nrow(m))] == 0) # TRUE

m[1,2] = 0.01
all(m[!diag(nrow(m))] == 0) # FALSE

diag函数有两种主要模式:给它一个向量,就像它一样diag(11:13),它把它放在对角线上。或者给它一个数字,diag(3)它会创建一个该大小的单位矩阵。然后我提取所有非对角元素并将它们与 0 进行比较。

于 2012-06-15T21:20:44.647 回答
1

只需检查:

sum(m) == sum(diag(m))
于 2018-08-06T14:50:40.197 回答