[R] stunning matrix multiplication differences Matrix vs. matrix

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Sat Sep 3 10:22:59 CEST 2022


FAQ 7.31 ?
Your matrices have about 9*10e8 entries after all.

I know almost nothing about the Matrix package, but what does
crossprod(RHS, Z) %*% RHS give for the two versions of Z = M and MM
(assuming Matrix:::crossprod S4 method works here)?
Hopefully a knowledgeable Matrix user will correct me if this is wrong.

Cheers,
Bert




On Fri, Sep 2, 2022 at 3:23 PM Karl May <karl.may0 using freenet.de> wrote:
>
> Hi all,
>
> can somebody help me out with an explanation of this:
>
> > class(M);class(MM);class(RHS)
> [1] "dgCMatrix"
> attr(,"package")
> [1] "Matrix"
> [1] "matrix" "array"
> [1] "dgeMatrix"
> attr(,"package")
> [1] "Matrix"
> > dim(M);dim(MM);dim(RHS)
> [1] 29418 29418
> [1] 29418 29418
> [1] 29418     1
> > max(abs(M-MM))
> [1] 0
> > t(RHS)%*%M%*%RHS
> 1 x 1 Matrix of class "dgeMatrix"
>          [,1]
> [1,] 7264.878
> > t(RHS)%*%MM%*%RHS
> 1 x 1 Matrix of class "dgeMatrix"
>          [,1]
> [1,] 5765.366
> >
>
> Apparently the two matrices "M" and "MM" are entirely identical but the
> difference in results from multiplying both with the same matrix is, say,
> significant.
>
> Even when I transfer M into "matrix" and then back into "Matrix" the
> differences remain:
>
> > M <- as.matrix(M)
> > t(RHS)%*%M%*%RHS
> 1 x 1 Matrix of class "dgeMatrix"
>          [,1]
> [1,] 5765.366
> > M <- Matrix(M)
> > t(RHS)%*%M%*%RHS
> 1 x 1 Matrix of class "dgeMatrix"
>          [,1]
> [1,] 7264.878
> >
>
> Frankly, I have no clue what's going on!!
>
> This is the session info:
>
> > sessionInfo()
> R version 4.1.3 (2022-03-10)
> Platform: x86_64-pc-linux-gnu (64-bit)
> Running under: Arch Linux
> BLAS/LAPACK: /opt/intel/mkl/lib/intel64/libmkl_gf_lp64.so
>
>  [1] LC_CTYPE=en_AU.UTF-8       LC_NUMERIC=C
>  [3] LC_TIME=C                  LC_COLLATE=en_AU.UTF-8
>  [5] LC_MONETARY=en_AU.UTF-8    LC_MESSAGES=en_AU.UTF-8
>  [7] LC_PAPER=en_AU.UTF-8       LC_NAME=C
>  [9] LC_ADDRESS=C               LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C
>
> [1] graphics  grDevices datasets  stats     utils     parallel  methods
> [8] base
> [1] pedigreemm_0.3-3  lme4_1.1-28       Matrix_1.4-0      bit64_4.0.5
> [5] bit_4.0.4         data.table_1.14.2
>
> loaded via a namespace (and not attached):
>  [1] Rcpp_1.0.8      lattice_0.20-45 MASS_7.3-55     grid_4.1.3
>  [5] nlme_3.1-155    minqa_1.2.4     nloptr_2.0.0    boot_1.3-28
>  [9] splines_4.1.3   tools_4.1.3     compiler_4.1.3
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list