如何比较两个矩阵,看看它们在R中是否相同?

Tyl*_*归玉门 7 r matrix

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

mymatrix<-Matrix(rnorm(20),ncol=5)
mysvd<-svd(mymatrix) 
newmatrix<-mysvd$u %*% diag(mysvd$d) %*% t(mysvd$v)
Run Code Online (Sandbox Code Playgroud)

我使用以下方法来比较它们:

identical(Matrix(newmatrix), mymatrix)
all.equal(Matrix(newmatrix), mymatrix)
Run Code Online (Sandbox Code Playgroud)

为什么第一个不返回TRUE?无论我使用矩阵包中的Matrix还是基础包中的矩阵

flo*_*del 8

identical由于差异非常小,它们并不完全相同(每个):

> max(abs(Matrix(newmatrix) - mymatrix))
[1] 1.110223e-15
Run Code Online (Sandbox Code Playgroud)

但这些差异小于默认tolerance内部all.equal:

> .Machine$double.eps ^ 0.5
[1] 1.490116e-08
Run Code Online (Sandbox Code Playgroud)

所以identical会返回FALSEall.equal返回TRUE.


G. *_*eck 7

请尝试以下方法:

> 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)
Run Code Online (Sandbox Code Playgroud)

显然,这些数据结构并不相同.