R 非对角和对角对称性检查,在不重复矩阵的情况下获得非对角和对角元素

R 非对角和对角对称性检查,在不重复矩阵的情况下获得非对角和对角元素,r,matrix,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

假设我有这个矩阵

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,3

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


  • 如果你曾经接受过一个答案,你可能会得到更好的回答。@nograps如果没有必要的信息,我怎么能接受这个答案?我注意到你勾选了一些答案。那太好了。现在试着在Google中键入对称矩阵r。你会发现测试矩阵在R中是否对称的函数。你所说的“元素以非对角形式出现(没有重复)”是什么意思?@SvenHohenstein我怀疑他的意思是,他想要的是对角线以外的值中唯一的值。如果你接受了答案,你可能会得到更好的回答。@nograps如果答案没有所需信息,我怎么能接受?我注意到你勾选了一些答案。那太好了。现在试着在Google中键入对称矩阵r。你会发现测试矩阵在R中是否对称的函数。你所说的“元素出现在非对角线中(没有重复)”是什么意思?@SvenHohenstein我怀疑他的意思是他想要值中唯一的值而不是对角线。
    Issymmetry(mat)
    返回
    FALSE
    。我也有同样的问题。在我将colnames更改为
    NULL
    后,它返回True。我想这种行为不是故意的。这似乎是一个错误。在
    isSymmetirc
    的帮助手册中,他们提到“注意,矩阵只有在其“行名”和“列名”相同时才是对称的。”对,阅读文档总是一个好主意。。。最简单的方法可能是
    issymmetry(unname(mat))
    issymmetry(mat)
    返回
    FALSE
    。我也有同样的问题。在我将colnames更改为
    NULL
    后,它返回True。我想这种行为不是故意的。这似乎是一个错误。在
    isSymmetirc
    的帮助手册中,他们提到“注意,矩阵只有在其“行名”和“列名”相同时才是对称的。”对,阅读文档总是一个好主意。。。最简单的方法是
    issymmetry(unname(mat))
    # 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
    
    mat <- as.matrix(read.table('abbas.txt'))
    isSymmetric(unname(mat))
    
    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.