Gles matris

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 13 december 2021; kontroller kräver 4 redigeringar .

En gles matris  är en matris med mestadels noll element. Annars, om de flesta av matriselementen är icke-noll, anses matrisen vara tät .

Bland experter finns det ingen enhet i att bestämma exakt hur många icke-nollelement som gör en matris gles. Olika författare erbjuder olika alternativ. För en matris av ordningen n, antalet element som inte är noll [1] :

Enorma glesa matriser uppstår ofta när man löser problem som partiella differentialekvationer .

När man lagrar och konverterar glesa matriser i en dator är det användbart, och ofta nödvändigt, att använda speciella algoritmer och datastrukturer som tar hänsyn till den glesa matrisstrukturen. Operationer och algoritmer som används för att arbeta med vanliga, täta matriser, i förhållande till stora glesa matriser, är relativt långsamma och kräver betydande mängder minne. Men glesa matriser kan enkelt komprimeras genom att bara skriva deras icke-noll-element, vilket minskar datorns minneskrav .

Presentation

Det finns flera sätt att lagra (representera) glesa matriser, som skiljer sig åt:


En Dictionary of Keys (DOK - Dictionary of Keys) är byggd som en ordbok, där nyckeln är ett par ( rad, kolumn ), och värdet är matriselementet som motsvarar raden och kolumnen.

En lista med listor (LIL - List of Lists) är byggd som en lista med strängar, där en sträng är en lista med noder av formen ( kolumn, värde ).

Koordinatlistan (COO - Koordinatlista) är en lista med element i formuläret (rad, kolumn, värde).


Compressed Row Storage (CSR - Compressed Sparse Row, CRS - Compressed Row Storage, Yale-format)

Vi representerar den ursprungliga matrisen som innehåller icke-nollvärden som tre arrayer:

Exempel:

Låt då

array_of_values ​​​​= { 1 , 2 , 4 , 2 , 6 } array of column_indexes = { 0 , 1 , 1 , 1 , 2 } array of_row_indexing = { 0 , 2 , 3 , 5 } -- lagra 0 först som låselement

Låt då

array_of_values ​​​​= { 1 , 2 , 3 , 4 , 1 , 11 } array of column_indexes = { 0 , 1 , 3 , 2 , 1 , 3 } array_of_index_rows = { 0 , 3 , 4 , 0 first } _ som ett låselement

För att återställa den ursprungliga matrisen måste du ta något värde i den första matrisen och motsvarande index , sedan kolumnnumret och radnumret hittas som det minsta , för vilket detta är praktiskt, till exempel när matrisen multiplikation med en tät vektor

void smdv ( const crsm * A , double * b , const double * v ) // b += Av { // crsm är en struktur {int n, int m, int nnz, double aval[], double aicol[], double airow[]}; för ( int rad = 0 ; rad < n ; ++ rad ) för ( int i = A -> airow [ rad ]; i < A -> airow [ rad + 1 ]; ++ i ) b [ rad ] += A -> aval [ i ] * v [ A -> aicol [ i ]]; }

Komprimerad kolumnlagring (CSС - Compressed Sparse Column, CСS - Compressed Column Storage)

Samma som CRS, bara rader och kolumner ändrar roller - vi lagrar värden efter kolumner, vi kan bestämma raden från den andra matrisen, efter beräkningar med den tredje matrisen - vi känner igen kolumnerna.

Programvarubibliotek

För beräkningar med glesa matriser har ett antal bibliotek skapats för olika programmeringsspråk, bland annat:

Anteckningar

  1. 1 2 Pissanecki, 1988 , Inledning.
  2. SparseLib++ . Datum för åtkomst: 1 augusti 2012. Arkiverad från originalet 21 september 2012.
  3. uBLAS/Boost . Hämtad 1 augusti 2012. Arkiverad från original 4 augusti 2012.
  4. Alan George, Esmond Ng. En kort beskrivning av SPARSPAK Waterloo sparse linear equations package  //  ACM SIGNUM Newsletter, Volume 19 Issue 4, October 1984. - NY, 1984. - P. 17-20 . — ISBN 978-1-4503-0245-6 . - doi : 10.1145/1057931.1057933 .
  5. TA Davis, Direct Methods for Sparse Linear Systems, SIAM, Philadelphia, september 2006 . Datum för åtkomst: 1 augusti 2012. Arkiverad från originalet den 29 juli 2012.
  6. Sparse matriser (scipy.sparse), SciPy Reference Guide . Hämtad 22 april 2017. Arkiverad från originalet 23 april 2017.
  7. Gles linjär algebra (scipy.sparse.linalg), SciPy Referensguide . Hämtad 22 april 2017. Arkiverad från originalet 23 april 2017.

Litteratur

  • Reginald P Tewarson. Glesa matriser. - Academic Press, 1973. - 160 sid. — ISBN 0126856508 . översättning: Tuarson R. Gles matriser = Gles matriser. - M . : Mir, 1977. - 191 sid.
  • Pissanecki S. Sparse Matrix Technology = Sparse Matrix Technology. — M .: Mir, 1988. — 410 sid. - ISBN 5-03-000960-4 .
  • George A., Liu J. Datorlösning av stora glesa positiva bestämda system. — M .: Mir, 1984. — 333 sid.