如何手动确定矩阵是否对称?
How to manually determine if a matrix is symmetric?
我尝试测试矩阵是否对称,但这不起作用。
> 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")
+ }else{print("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"
base 中有一个函数(如评论中所述)可以满足您的需求。
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]
进行比较)不相等,则我退出循环并 return 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)}
但这根本没有效率。
我尝试测试矩阵是否对称,但这不起作用。
> 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")
+ }else{print("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"
base 中有一个函数(如评论中所述)可以满足您的需求。
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]
进行比较)不相等,则我退出循环并 return 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)}
但这根本没有效率。