Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
Packed storage matrix
Programming term

A packed storage matrix, also known as packed matrix, is a term used in programming for representing an m × n {\displaystyle m\times n} matrix. It is a more compact way than an m-by-n rectangular array by exploiting a special structure of the matrix.

Typical examples of matrices that can take advantage of packed storage include:

We don't have any images related to Packed storage matrix yet.
We don't have any YouTube videos related to Packed storage matrix yet.
We don't have any PDF documents related to Packed storage matrix yet.
We don't have any Books related to Packed storage matrix yet.
We don't have any archived web articles related to Packed storage matrix yet.

Triangular packed matrices

The packed storage matrix allows a matrix to be converted to an array, shrinking the matrix significantly. In doing so, a square n × n {\displaystyle n\times n} matrix is converted to an array of length ⁠n(n+1)/2⁠.1

Consider the following upper matrix:

U = ( a 11 a 12 a 13 a 14 a 22 a 23 a 24 a 33 a 34 a 44 ) {\displaystyle \mathbf {U} ={\begin{pmatrix}a_{11}&a_{12}&a_{13}&a_{14}\\&a_{22}&a_{23}&a_{24}\\&&a_{33}&a_{34}\\&&&a_{44}\\\end{pmatrix}}}

which can be packed into the one array:

U P = ( a 11 ⏟   a 12   a 22 ⏟   a 13   a 23   a 33 ⏟   a 14 ,   a 24   a 34   a 44 ⏟ ) {\displaystyle \mathbf {UP} =(\underbrace {a_{11}} \ \underbrace {a_{12}\ a_{22}} \ \underbrace {a_{13}\ a_{23}\ a_{33}} \ \underbrace {a_{14},\ a_{24}\ a_{34}\ a_{44}} )} 2

Similarly the lower matrix:

L = ( a 11 a 21 a 22 a 31 a 32 a 33 a 41 a 42 a 43 a 44 ) . {\displaystyle \mathbf {L} ={\begin{pmatrix}a_{11}&&&\\a_{21}&a_{22}&&\\a_{31}&a_{32}&a_{33}&\\a_{41}&a_{42}&a_{43}&a_{44}\\\end{pmatrix}}.}

can be packed into the following one dimensional array:

L P = ( a 11   a 21   a 31   a 41 ⏟   a 22   a 32   a 42 ⏟   a 33   a 43 ⏟   a 44 ⏟ ) {\displaystyle LP=(\underbrace {a_{11}\ a_{21}\ a_{31}\ a_{41}} \ \underbrace {a_{22}\ a_{32}\ a_{42}} \ \underbrace {a_{33}\ a_{43}} \ \underbrace {a_{44}} )} 3

Code examples (Fortran)

Both of the following storage schemes are used extensively in BLAS and LAPACK.

An example of packed storage for Hermitian matrix:

complex :: A(n,n) ! a hermitian matrix complex :: AP(n*(n+1)/2) ! packed storage for A ! the lower triangle of A is stored column-by-column in AP. ! unpacking the matrix AP to A do j=1,n k = j*(j-1)/2 A(1:j,j) = AP(1+k:j+k) A(j,1:j-1) = conjg(AP(1+k:j-1+k)) end do

An example of packed storage for banded matrix:

real :: A(m,n) ! a banded matrix with kl subdiagonals and ku superdiagonals real :: AP(-kl:ku,n) ! packed storage for A ! the band of A is stored column-by-column in AP. Some elements of AP are unused. ! unpacking the matrix AP to A do j = 1, n forall(i=max(1,j-kl):min(m,j+ku)) A(i,j) = AP(i-j,j) end do print *,AP(0,:) ! the diagonal

See also

Further reading

References

  1. Golub, Gene H.; Van Loan, Charles F. (2013). Matrix Computations (4th ed.). Baltimore, MD: Johns Hopkins University Press. p. 170. ISBN 9781421407944. 9781421407944

  2. Blackford, Susan (1999-10-01). "Packed Storage". Netlib. LAPACK Users' Guide. Archived from the original on 2024-04-01. Retrieved 2024-10-01. https://web.archive.org/web/20240401131450/https://www.netlib.org/lapack/lug/node123.html

  3. Blackford, Susan (1999-10-01). "Packed Storage". Netlib. LAPACK Users' Guide. Archived from the original on 2024-04-01. Retrieved 2024-10-01. https://web.archive.org/web/20240401131450/https://www.netlib.org/lapack/lug/node123.html