0

假设我有这个矩阵

8 3 1 1 2 2 1 1 1 1 1 1 2 2 1 1 3
3 8 3 1 1 2 2 1 1 1 1 1 1 2 2 1 1
1 3 8 3 1 1 2 2 1 1 1 1 1 1 2 2 1
1 1 3 8 3 1 1 2 2 1 1 1 1 1 1 2 2
2 1 1 3 8 3 1 1 2 2 1 1 1 1 1 1 2
2 2 1 1 3 8 3 1 1 2 2 1 1 1 1 1 1
1 2 2 1 1 3 8 3 1 1 2 2 1 1 1 1 1
1 1 2 2 1 1 3 8 3 1 1 2 2 1 1 1 1
1 1 1 2 2 1 1 3 8 3 1 1 2 2 1 1 1
1 1 1 1 2 2 1 1 3 8 3 1 1 2 2 1 1
1 1 1 1 1 2 2 1 1 3 8 3 1 1 2 2 1
1 1 1 1 1 1 2 2 1 1 3 8 3 1 1 2 2
2 1 1 1 1 1 1 2 2 1 1 3 8 3 1 1 2
2 2 1 1 1 1 1 1 2 2 1 1 3 8 3 1 1
1 2 2 1 1 1 1 1 1 2 2 1 1 3 8 3 1
1 1 2 2 1 1 1 1 1 1 2 2 1 1 3 8 3
3 1 1 2 2 1 1 1 1 1 1 2 2 1 1 3 8

我想检查

  1. 非对角线是否对称?(在上面的矩阵中,这些是对称的)

  2. 元素出现在非对角线(不重复)?- 在上面的矩阵中,这些元素是 1,2,3

  3. 对角线上的元素是对称的吗?如果是打印元素?(如上述矩阵中的 8 )

4

2 回答 2

2
# 1
all(mat == t(mat))
[1] TRUE

# 2
unique(mat[upper.tri(mat) | lower.tri(mat)])
[1] 3 1 2

# 3
if(length(unique(diag(mat))) == 1) print(diag(mat)[1])
[1] 8
于 2013-02-05T19:37:16.963 回答
1
mat <- as.matrix(read.table('abbas.txt'))
isSymmetric(unname(mat))

'请注意,矩阵只有在其'rownames'和'colnames'相同时才是对称的。

unique(mat[lower.tri(mat)])

all(diag(mat) == rev(diag(mat)))
# I assume you mean the diagonal is symmetric when its reverse is the same with itself.
于 2013-02-05T19:39:05.870 回答