非对角线和对角线对称性检查,获得非对角线和对角线元素,而不重复矩阵

时间:2013-02-05 18:55:02

标签: r matrix

假设我有这个矩阵

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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.