Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较两个矩阵以确定它们在R中是否相同?_R_Matrix - Fatal编程技术网

如何比较两个矩阵以确定它们在R中是否相同?

如何比较两个矩阵以确定它们在R中是否相同?,r,matrix,R,Matrix,例如,我有两个矩阵,我想知道它们在每个元素中是否相同 mymatrix<-Matrix(rnorm(20),ncol=5) mysvd<-svd(mymatrix) newmatrix<-mysvd$u %*% diag(mysvd$d) %*% t(mysvd$v) 为什么第一个不返回真值? 无论我使用Matrix软件包中的Matrix还是基本软件包中的Matrix,请尝试以下操作: > dput(Matrix(newmatrix)) new("dgeMatrix"

例如,我有两个矩阵,我想知道它们在每个元素中是否相同

mymatrix<-Matrix(rnorm(20),ncol=5)
mysvd<-svd(mymatrix) 
newmatrix<-mysvd$u %*% diag(mysvd$d) %*% t(mysvd$v)
为什么第一个不返回真值? 无论我使用Matrix软件包中的Matrix还是基本软件包中的Matrix,请尝试以下操作:

> dput(Matrix(newmatrix))
new("dgeMatrix"
    , x = c(-0.705193264426589, 0.68023073271425, 0.0726318059033283, -0.111055227906436, 
-0.113940777963113, 0.726463241417717, -0.343435098646076, 0.885225942372688, 
-0.549848405897803, -0.0227469387867766, -0.927524398860002, 
0.58047674424687, 0.521144348439824, 0.279602090928527, -1.31686400403363, 
0.906874499735628, -0.276997805548975, 0.632960950203858, 0.453881309098762, 
-0.00528540521655077)
    , Dim = 4:5
    , Dimnames = list(NULL, NULL)
    , factors = list()
)

> dput(newmatrix)
structure(c(-0.705193264426589, 0.68023073271425, 0.0726318059033283, 
-0.111055227906436, -0.113940777963113, 0.726463241417717, -0.343435098646076, 
0.885225942372688, -0.549848405897803, -0.0227469387867766, -0.927524398860002, 
0.58047674424687, 0.521144348439824, 0.279602090928527, -1.31686400403363, 
0.906874499735628, -0.276997805548975, 0.632960950203858, 0.453881309098762, 
-0.00528540521655077), .Dim = 4:5)

显然,这些数据结构不同。

您要比较的第一个数据结构:

> Matrix(newmatrix)
4 x 5 Matrix of class "dgeMatrix"
           [,1]       [,2]       [,3]        [,4]       [,5]
[1,]  0.5052901 -0.3264201 -0.8576401 -0.62666359  2.1076090
[2,]  0.2356111  0.4911067 -1.2376674  1.11231840  0.8576557
[3,] -0.6244670  1.4423943 -1.2820541 -0.05297437 -2.0458810
[4,] -0.2669079  1.1218459  0.6371571 -0.52168139  0.2163623
与:

如果您阅读了
idential
的帮助,您会看到:
测试两个对象是否完全相等的安全可靠方法。
您正在比较
矩阵
-类对象与R标准矩阵对象。他们非常不同。即使两个具有不同属性的对象也不会完全相同:

> x
a b c d 
1 2 3 4 
> y
[1] 1 2 3 4
> x==y
   a    b    c    d 
TRUE TRUE TRUE TRUE 
> identical(x,y)
[1] FALSE

它们并不完全相等(根据
相同的
),因为差异非常小:

> max(abs(Matrix(newmatrix) - mymatrix))
[1] 1.110223e-15
但是这些差异小于默认的
公差
内部
all.equal

> .Machine$double.eps ^ 0.5
[1] 1.490116e-08

因此
idential
将返回
FALSE
all。equal
将返回
TRUE

您可以检查两个矩阵是否相同(相同),如下所示

假设您有两个矩阵,
newMatrix
oldMatrix
,它们可以是任意维度

which(which(newMatrix==oldMatrix)==FALSE)
将返回
整数(0)
,如果两个矩阵相同

> max(abs(Matrix(newmatrix) - mymatrix))
[1] 1.110223e-15
> .Machine$double.eps ^ 0.5
[1] 1.490116e-08