如何手动确定矩阵是不是对称?
Posted
技术标签:
【中文标题】如何手动确定矩阵是不是对称?【英文标题】:How to manually determine if a matrix is symmetric?如何手动确定矩阵是否对称? 【发布时间】:2020-04-20 20:20:01 【问题描述】:我尝试测试矩阵是否对称,但这不起作用。
> View(new.function)
> View(new.function)
> new.function <- function(a)
+ for(i in 1:nrow(a))
+ for(j in 1:ncol(a))
+ if(a==t(a))
+ print("true")
+ elseprint("false")
+
+
+
> a <- matrix(1:3,3,3)
> a
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
> new.function(a)
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
[1] "true"
【问题讨论】:
stat.ethz.ch/R-manual/R-patched/library/base/html/…isSymmetric(a, check.attributes = FALSE)
【参考方案1】:
base 中有一个函数(如 cmets 中所述)可以为您提供所需的功能。
isSymmetric.matrix(a)
# [1] FALSE
但是,如果您想编写自己的函数,那么您应该知道您不需要循环。您只需使用all
即可检查矩阵及其转置是否相同(所有条目都相等)。
new.function <- function(a) all(a==t(a))
或使用all.equal
(效率较低)。
new.function <- function(a) all.equal(b, t(b))==1
如果您坚持使用循环,那么您必须在比较中使用索引。在这里,我改变了比较条目的方式。我假设矩阵是对称的;如果转置矩阵中的一个索引及其相关条目(a[i,j]
将与t(a)[i,j]
或a[j,i]
进行比较)不相等,则退出循环并返回FALSE
。
new.function <- function(a)
ans = TRUE
for(i in 1:nrow(a))
for(j in 1:ncol(a))
if(a[i,j]!=a[j,i])
ans = FALSE;break
return(ans)
但这根本没有效率。
【讨论】:
以上是关于如何手动确定矩阵是不是对称?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不手动检查的情况下确定网站是不是使用 webassembly?