3. Tensor decomposition by DelayedTensor

Authors: Koki Tsuyuzaki [aut, cre]
Last modified: 2024-10-30 05:24:24.255552
Compiled: Wed Oct 30 05:26:45 2024

Setting

suppressPackageStartupMessages(library("DelayedTensor"))
suppressPackageStartupMessages(library("DelayedArray"))
suppressPackageStartupMessages(library("HDF5Array"))
suppressPackageStartupMessages(library("DelayedRandomArray"))

darr <- RandomUnifArray(c(3,4,5))

setVerbose(FALSE)
setSparse(FALSE)
setAutoBlockSize(1E+8)
## automatic block size set to 1e+08 bytes (was 1e+08)
tmpdir <- tempdir()
setHDF5DumpDir(tmpdir)

Tensor Decomposition

Tensor decomposition models decompose multiple factor matrices and core tensor. Each factor matrix means the patterns of each mode and is used for the visualization and the downstream analysis. Core tensor means the intensity of the patterns and is used to decide which patterns are informative.

We reimplemented some of the tensor decomposition functions of rTensor using block processing of DelayedArray.

Only tensor decomposition algorithms and utility functions that require Fast Fourier Transform (e.g., t_mult, t_svd, and t_svd_reconstruct) are exceptions and have not yet been implemented in DelayedArray because we are still investigating how to calculate them with out-of-core manner.

Tucker Decomposition

Suppose a tensor π’³β€„βˆˆβ€„β„œIβ€…Γ—β€…Jβ€…Γ—β€…K. Tucker decomposition models decomposes a tensor 𝒳 into a core tensor π’’β€„βˆˆβ€„β„œpβ€…Γ—β€…qβ€…Γ—β€…r, and multiple factor matrices Aβ€„βˆˆβ€„β„œIβ€…Γ—β€…p, Bβ€„βˆˆβ€„β„œJβ€…Γ—β€…q, and Cβ€„βˆˆβ€„β„œKβ€…Γ—β€…r (p ≀ I, q ≀ J, andΒ r ≀ K).

𝒳 = 𝒒×1AΓ—2BΓ—3C

For simplicity, here we will use a third-order tensor but the Tucker decomposition can be applied to tensors of larger orders.

There are well-known two algorithms; Higher-Order Singular Value Decomposition (HOSVD) and Higher-order Orthogonal Iteration (HOOI).

hosvd performs the HOSVD Tucker decomposition and tucker performs HOOI Tucker decomposition.

For the details, check the hosvd and tucker functions of rTensor.

out_hosvd <- hosvd(darr, ranks=c(2,1,3))
##   |                                                                              |                                                                      |   0%  |                                                                              |=======================                                               |  33%  |                                                                              |===============================================                       |  67%  |                                                                              |======================================================================| 100%
str(out_hosvd)
## List of 4
##  $ Z          :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14341437e728.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO00125"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 2 1 3
##   .. .. .. ..@ chunkdim : int [1:3] 2 1 3
##   .. .. .. ..@ first_val: num -3.8
##  $ U          :List of 3
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:3, 1:2] -0.371 -0.608 -0.702 0.501 0.506 ...
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:4, 1] -0.462 -0.453 -0.496 -0.579
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:5, 1:3] -0.506 -0.383 -0.475 -0.538 -0.286 ...
##  $ est        :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto1434403d262b.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO00142"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 3 4 5
##   .. .. .. ..@ chunkdim : int [1:3] 3 4 5
##   .. .. .. ..@ first_val: num 0.386
##  $ fnorm_resid: num 1.81
out_tucker <- tucker(darr, ranks=c(2,3,2))
##   |                                                                              |                                                                      |   0%  |                                                                              |===                                                                   |   4%  |                                                                              |======                                                                |   8%  |                                                                              |========                                                              |  12%  |                                                                              |===========                                                           |  16%  |                                                                              |==============                                                        |  20%  |                                                                              |======================================================================| 100%
str(out_tucker)
## List of 7
##  $ Z           :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14347efc7546.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO00446"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 2 3 2
##   .. .. .. ..@ chunkdim : int [1:3] 2 3 2
##   .. .. .. ..@ first_val: num 3.8
##  $ U           :List of 3
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:3, 1:2] -0.379 -0.604 -0.702 0.338 0.615 ...
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:4, 1:3] -0.465 -0.452 -0.48 -0.591 0.14 ...
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:5, 1:2] 0.511 0.375 0.477 0.534 0.293 ...
##  $ conv        : logi TRUE
##  $ est         :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14343bfe0b5e.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO00480"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 3 4 5
##   .. .. .. ..@ chunkdim : int [1:3] 3 4 5
##   .. .. .. ..@ first_val: num 0.333
##  $ norm_percent: num 66.2
##  $ fnorm_resid : num 1.43
##  $ all_resids  : num [1:5] 1.44 1.43 1.43 1.43 1.43

CANDECOMP/PARAFAC (CP) Decomposition

Suppose a tensor π’³β€„βˆˆβ€„β„œIβ€…Γ—β€…Jβ€…Γ—β€…K. CP decomposition models decomposes a tensor X into a core diagonal tensor π’’β€„βˆˆβ€„β„œrβ€…Γ—β€…rβ€…Γ—β€…r, and multiple factor matrices Aβ€„βˆˆβ€„β„œIβ€…Γ—β€…r, Bβ€„βˆˆβ€„β„œJβ€…Γ—β€…r, and Cβ€„βˆˆβ€„β„œKβ€…Γ—β€…r (r ≀ min (I, J, K)).

𝒳 = 𝒒×1AΓ—2BΓ—3C

For simplicity, here we will use a third-order tensor but the CP decomposition can be applied to tensors of larger orders.

Alternating least squares (ALS) is a well-known algorithm for CP decomposition and cp performs the ALS CP decomposition.

For the details, check the cp function of rTensor.

out_cp <- cp(darr, num_components=2)
##   |                                                                              |                                                                      |   0%  |                                                                              |===                                                                   |   4%  |                                                                              |======                                                                |   8%  |                                                                              |========                                                              |  12%  |                                                                              |===========                                                           |  16%  |                                                                              |==============                                                        |  20%  |                                                                              |=================                                                     |  24%  |                                                                              |====================                                                  |  28%  |                                                                              |======================                                                |  32%  |                                                                              |=========================                                             |  36%  |                                                                              |============================                                          |  40%  |                                                                              |===============================                                       |  44%  |                                                                              |==================================                                    |  48%  |                                                                              |====================================                                  |  52%  |                                                                              |=======================================                               |  56%  |                                                                              |==========================================                            |  60%  |                                                                              |=============================================                         |  64%  |                                                                              |================================================                      |  68%  |                                                                              |==================================================                    |  72%  |                                                                              |=====================================================                 |  76%  |                                                                              |========================================================              |  80%  |                                                                              |===========================================================           |  84%  |                                                                              |==============================================================        |  88%  |                                                                              |================================================================      |  92%  |                                                                              |===================================================================   |  96%  |                                                                              |======================================================================| 100%
str(out_cp)
## List of 7
##  $ lambdas     : num [1:2] 5.1 32.4
##  $ U           :List of 3
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. .. ..@ seed:Formal class 'DelayedUnaryIsoOpWithArgs' [package "DelayedArray"] with 6 slots
##   .. .. .. .. .. .. ..@ OP    :function (e1, e2)  
##   .. .. .. .. .. .. ..@ Largs : list()
##   .. .. .. .. .. .. ..@ Rargs :List of 1
##   .. .. .. .. .. .. .. ..$ : num [1:2] 5.14 32.49
##   .. .. .. .. .. .. ..@ Lalong: int(0) 
##   .. .. .. .. .. .. ..@ Ralong: int 1
##   .. .. .. .. .. .. ..@ seed  :Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. .. .. .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. .. .. .. .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. .. .. .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto1434785f9273.h5"
##   .. .. .. .. .. .. .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02079"
##   .. .. .. .. .. .. .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. .. .. .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. .. .. .. .. .. .. ..@ dim      : int [1:2] 3 2
##   .. .. .. .. .. .. .. .. .. .. ..@ chunkdim : int [1:2] 3 2
##   .. .. .. .. .. .. .. .. .. .. ..@ first_val: num 0.504
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. .. ..@ seed:Formal class 'DelayedUnaryIsoOpWithArgs' [package "DelayedArray"] with 6 slots
##   .. .. .. .. .. .. ..@ OP    :function (e1, e2)  
##   .. .. .. .. .. .. ..@ Largs : list()
##   .. .. .. .. .. .. ..@ Rargs :List of 1
##   .. .. .. .. .. .. .. ..$ : num [1:2] 5.2 32.6
##   .. .. .. .. .. .. ..@ Lalong: int(0) 
##   .. .. .. .. .. .. ..@ Ralong: int 1
##   .. .. .. .. .. .. ..@ seed  :Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. .. .. .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. .. .. .. .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. .. .. .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto143455953c6.h5"
##   .. .. .. .. .. .. .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02102"
##   .. .. .. .. .. .. .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. .. .. .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. .. .. .. .. .. .. ..@ dim      : int [1:2] 4 2
##   .. .. .. .. .. .. .. .. .. .. ..@ chunkdim : int [1:2] 4 2
##   .. .. .. .. .. .. .. .. .. .. ..@ first_val: num 0.371
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. .. ..@ seed:Formal class 'DelayedUnaryIsoOpWithArgs' [package "DelayedArray"] with 6 slots
##   .. .. .. .. .. .. ..@ OP    :function (e1, e2)  
##   .. .. .. .. .. .. ..@ Largs : list()
##   .. .. .. .. .. .. ..@ Rargs :List of 1
##   .. .. .. .. .. .. .. ..$ : num [1:2] 5.1 32.4
##   .. .. .. .. .. .. ..@ Lalong: int(0) 
##   .. .. .. .. .. .. ..@ Ralong: int 1
##   .. .. .. .. .. .. ..@ seed  :Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. .. .. .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. .. .. .. .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. .. .. .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto1434755f4385.h5"
##   .. .. .. .. .. .. .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02125"
##   .. .. .. .. .. .. .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. .. .. .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. .. .. .. .. .. .. ..@ dim      : int [1:2] 5 2
##   .. .. .. .. .. .. .. .. .. .. ..@ chunkdim : int [1:2] 5 2
##   .. .. .. .. .. .. .. .. .. .. ..@ first_val: num -2.8
##  $ conv        : logi FALSE
##  $ est         :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14341b6f811b.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02142"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 3 4 5
##   .. .. .. ..@ chunkdim : int [1:3] 3 4 5
##   .. .. .. ..@ first_val: num 0.376
##  $ norm_percent: num 62.8
##  $ fnorm_resid : num 1.57
##  $ all_resids  : num [1:24] 1.83 1.73 1.72 1.72 1.72 ...

Multilinear Principal Component Analysis (MPCA)

MPCA is a kind of Tucker decomposition and when the order of tensor is 3, this is also known as the Generalized Low-Rank Approximation of Matrices (GLRAM). For the details, check the mpca function of rTensor.

out_mpca <- mpca(darr, ranks=c(2,2))
##   |                                                                              |                                                                      |   0%  |                                                                              |===                                                                   |   4%  |                                                                              |======                                                                |   8%  |                                                                              |========                                                              |  12%  |                                                                              |======================================================================| 100%
str(out_mpca)
## List of 7
##  $ Z_ext       :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto1434594fc953.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02244"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 2 2 5
##   .. .. .. ..@ chunkdim : int [1:3] 2 2 5
##   .. .. .. ..@ first_val: num 1.89
##  $ U           :List of 3
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:3, 1:2] -0.3736 -0.5952 -0.7114 0.8999 -0.0465 ...
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed: num [1:4, 1:2] -0.468 -0.43 -0.496 -0.591 0.394 ...
##   ..$ : NULL
##  $ conv        : logi TRUE
##  $ est         :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto1434586aa986.h5"
##   .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02266"
##   .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. ..@ type     : chr NA
##   .. .. .. ..@ dim      : int [1:3] 3 4 5
##   .. .. .. ..@ chunkdim : int [1:3] 3 4 5
##   .. .. .. ..@ first_val: num 0.367
##  $ norm_percent: num 65.7
##  $ fnorm_resid : num 1.45
##  $ all_resids  : num [1:3] 1.45 1.45 1.45

Population Value Decomposition (PVD)

Suppose a series of 2D data X_{j}, where Xjβ€„βˆˆβ€„β„œn1β€…Γ—β€…n2, and j = 1, …, n3. PVD models decomposes a tensor Xj into two common factor matrices across all Xj, Pβ€„βˆˆβ€„β„œn1β€…Γ—β€…r1 and Dβ€„βˆˆβ€„β„œn2β€…Γ—β€…r2, and a Xj specific factor matrix Vjβ€„βˆˆβ€„β„œr1β€…Γ—β€…r2 (r1 ≀ n1, andΒ r2 ≀ n2).

Xj = Pβ€…Γ—β€…Vjβ€…Γ—β€…D

For the details, check the pvd function of rTensor.

out_pvd <- pvd(darr,
  uranks=rep(2,dim(darr)[3]), wranks=rep(3,dim(darr)[3]), a=2, b=3)
##   |                                                                              |                                                                      |   0%  |                                                                              |=========                                                             |  12%  |                                                                              |==================                                                    |  25%  |                                                                              |==========================                                            |  38%  |                                                                              |===================================                                   |  50%  |                                                                              |============================================                          |  62%  |                                                                              |====================================================                  |  75%  |                                                                              |=============================================================         |  88%  |                                                                              |======================================================================| 100%
str(out_pvd)
## List of 6
##  $ P           :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. ..@ seed: num [1:3, 1:2] 0.244 0.483 0.841 0.542 0.651 ...
##  $ D           :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. ..@ seed:Formal class 'DelayedAperm' [package "DelayedArray"] with 2 slots
##   .. .. .. ..@ perm: int [1:2] 2 1
##   .. .. .. ..@ seed: num [1:4, 1:3] -0.38 -0.53 -0.609 -0.451 0.428 ...
##  $ V           :List of 5
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto1434198c1c85.h5"
##   .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02300"
##   .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. ..@ dim      : int [1:2] 2 3
##   .. .. .. .. ..@ chunkdim : int [1:2] 2 3
##   .. .. .. .. ..@ first_val: num -1.64
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14344b59edc1.h5"
##   .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02306"
##   .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. ..@ dim      : int [1:2] 2 3
##   .. .. .. .. ..@ chunkdim : int [1:2] 2 3
##   .. .. .. .. ..@ first_val: num -1.34
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14346ef654ee.h5"
##   .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02312"
##   .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. ..@ dim      : int [1:2] 2 3
##   .. .. .. .. ..@ chunkdim : int [1:2] 2 3
##   .. .. .. .. ..@ first_val: num -1.86
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto143452d836de.h5"
##   .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02318"
##   .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. ..@ dim      : int [1:2] 2 3
##   .. .. .. .. ..@ chunkdim : int [1:2] 2 3
##   .. .. .. .. ..@ first_val: num -2.04
##   ..$ :Formal class 'DelayedMatrix' [package "DelayedArray"] with 1 slot
##   .. .. ..@ seed:Formal class 'HDF5ArraySeed' [package "HDF5Array"] with 7 slots
##   .. .. .. .. ..@ filepath : chr "/tmp/RtmpvxgP3l/auto14344160f41a.h5"
##   .. .. .. .. ..@ name     : chr "/HDF5ArrayAUTO02324"
##   .. .. .. .. ..@ as_sparse: logi FALSE
##   .. .. .. .. ..@ type     : chr NA
##   .. .. .. .. ..@ dim      : int [1:2] 2 3
##   .. .. .. .. ..@ chunkdim : int [1:2] 2 3
##   .. .. .. .. ..@ first_val: num -0.971
##  $ est         :Formal class 'DelayedArray' [package "DelayedArray"] with 1 slot
##   .. ..@ seed: num [1:3, 1:4, 1:5] 0.367 0.628 0.71 0.434 0.692 ...
##  $ norm_percent: num 67
##  $ fnorm_resid : num 1.4

Session information

## R version 4.4.1 (2024-06-14)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.1 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C              
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## time zone: Etc/UTC
## tzcode source: system (glibc)
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] DelayedRandomArray_1.13.1 HDF5Array_1.33.8         
##  [3] rhdf5_2.49.0              DelayedArray_0.31.14     
##  [5] SparseArray_1.5.45        S4Arrays_1.5.11          
##  [7] abind_1.4-8               IRanges_2.39.2           
##  [9] S4Vectors_0.43.2          MatrixGenerics_1.17.1    
## [11] matrixStats_1.4.1         BiocGenerics_0.53.0      
## [13] Matrix_1.7-1              DelayedTensor_1.13.0     
## [15] BiocStyle_2.35.0         
## 
## loaded via a namespace (and not attached):
##  [1] dqrng_0.4.1         sass_0.4.9          lattice_0.22-6     
##  [4] digest_0.6.37       evaluate_1.0.1      grid_4.4.1         
##  [7] fastmap_1.2.0       jsonlite_1.8.9      BiocManager_1.30.25
## [10] codetools_0.2-20    jquerylib_0.1.4     cli_3.6.3          
## [13] rlang_1.1.4         crayon_1.5.3        XVector_0.45.0     
## [16] cachem_1.1.0        yaml_2.3.10         tools_4.4.1        
## [19] beachmat_2.23.0     parallel_4.4.1      BiocParallel_1.39.0
## [22] einsum_0.1.2        Rhdf5lib_1.27.0     rsvd_1.0.5         
## [25] buildtools_1.0.0    R6_2.5.1            lifecycle_1.0.4    
## [28] zlibbioc_1.51.2     BiocSingular_1.23.0 irlba_2.3.5.1      
## [31] ScaledMatrix_1.13.0 rTensor_1.4.8       bslib_0.8.0        
## [34] Rcpp_1.0.13         xfun_0.48           sys_3.4.3          
## [37] knitr_1.48          rhdf5filters_1.17.0 htmltools_0.5.8.1  
## [40] rmarkdown_2.28      maketools_1.3.1     compiler_4.4.1