<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Compressed_Row_Storage</id>
	<title>Compressed Row Storage - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Compressed_Row_Storage"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Compressed_Row_Storage&amp;action=history"/>
	<updated>2026-05-19T03:11:07Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Compressed_Row_Storage&amp;diff=1179626&amp;oldid=prev</id>
		<title>imported&gt;Aka: https, Kleinkram</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Compressed_Row_Storage&amp;diff=1179626&amp;oldid=prev"/>
		<updated>2023-11-22T13:14:49Z</updated>

		<summary type="html">&lt;p&gt;https, Kleinkram&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Compressed Row Storage&amp;#039;&amp;#039;&amp;#039; (CRS) oder &amp;#039;&amp;#039;&amp;#039;Compressed Sparse Row&amp;#039;&amp;#039;&amp;#039; (CSR) ist ein häufig genutztes Verfahren zum Speichern [[Dünnbesetzte Matrix|dünnbesetzter Matrizen]]. In der [[Numerische Mathematik|numerischen Mathematik]] bezeichnet man damit eine [[Matrix (Mathematik)|Matrix]], bei der so viele Einträge aus Nullen bestehen, dass es sich lohnt, dies auszunutzen.&lt;br /&gt;
&lt;br /&gt;
Beim CRS-Verfahren werden nur die von Null verschiedenen Einträge einer &amp;lt;math&amp;gt;(m \times n)&amp;lt;/math&amp;gt;-Matrix &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; gespeichert: In Form eines Arrays &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt;, also an aufeinanderfolgenden Stellen im Speicher. Die für die Abbildung zwischen Positionen in der Matrix und dem Array &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt; benötigten Informationen werden in zwei weiteren Arrays &amp;lt;math&amp;gt;rowPtr&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;colInd&amp;lt;/math&amp;gt; gespeichert. In &amp;lt;math&amp;gt;colInd&amp;lt;/math&amp;gt; ist zu jedem Eintrag aus &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt; der Index seiner Spalte gespeichert. Er umfasst daher gleich viele Elemente wie &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt;. Die Werte in &amp;lt;math&amp;gt;rowPtr&amp;lt;/math&amp;gt; legen fest, welche Werte von &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt; zu welcher Zeile gehören.&lt;br /&gt;
&lt;br /&gt;
Der formale Zusammenhang zwischen der Matrix &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; und ihrer Darstellung unter Verwendung von CRS lautet:&lt;br /&gt;
:&amp;lt;math&amp;gt;A_{i,j} =val[k] \iff (colInd[k] = j ) \land ( rowPtr[i] \leq k &amp;lt; rowPtr[i+1] ).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&amp;lt;br /&amp;gt;&lt;br /&gt;
(Die blauen Zahlen geben die Zeilen und die grünen die Spalten der Matrix &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; an. Die Indizes beginnen wie in vielen Computersprachen üblich mit 0.)&lt;br /&gt;
:&amp;lt;math&amp;gt;A=&lt;br /&gt;
  \begin{pmatrix} &lt;br /&gt;
    \underset{({\color{Blue}0},{\color{Green}0})}{10} &amp;amp; 0 &amp;amp; 0 &amp;amp; \underset{({\color{Blue}0},{\color{Green}3})}{12} &amp;amp; 0 \\ &lt;br /&gt;
    0 &amp;amp; 0 &amp;amp; \underset{({\color{Blue}1},{\color{Green}2})}{11} &amp;amp; 0 &amp;amp; \underset{({\color{Blue}1},{\color{Green}4})}{13} \\&lt;br /&gt;
    0 &amp;amp; \underset{({\color{Blue}2},{\color{Green}1})}{16} &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 \\&lt;br /&gt;
    0 &amp;amp; 0 &amp;amp; \underset{({\color{Blue}3},{\color{Green}2})}{11} &amp;amp; 0 &amp;amp; \underset{({\color{Blue}3},{\color{Green}4})}{13} \\&lt;br /&gt;
  \end{pmatrix} &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel sind in den drei Vektoren folgende Werte gespeichert:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
  \begin{matrix}&lt;br /&gt;
    val &amp;amp; =&lt;br /&gt;
      &amp;amp; \left( \underset{({\color{Blue}0},{\color{Green}0})}{10} \right.&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}0},{\color{Green}3})}{12}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}1},{\color{Green}2})}{11}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}1},{\color{Green}4})}{13}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}2},{\color{Green}1})}{16}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}3},{\color{Green}2})}{11}&lt;br /&gt;
      &amp;amp; \left. \underset{({\color{Blue}3},{\color{Green}4})}{13} \right)&lt;br /&gt;
      \\&lt;br /&gt;
    colInd &amp;amp; =&lt;br /&gt;
      &amp;amp; \left( \underset{({\color{Blue}0}\,}{{\color{Green}0}} \right.&lt;br /&gt;
      &amp;amp;        \underset{\ \,)}             {{\color{Green}3}}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}1}\,}{{\color{Green}2}}&lt;br /&gt;
      &amp;amp;        \underset{\ \,)}             {{\color{Green}4}}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}2}) }{{\color{Green}1}}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}3}\,}{{\color{Green}2}}&lt;br /&gt;
      &amp;amp; \left. \underset{\ \,)}             {{\color{Green}4}} \, \right)&lt;br /&gt;
      \\&lt;br /&gt;
    rowPtr &amp;amp; =&lt;br /&gt;
      &amp;amp; \left( \underset{({\color{Blue}0})}{0} \right.&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}1})}{2}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}2})}{4}&lt;br /&gt;
      &amp;amp;        \underset{({\color{Blue}3})}{5}&lt;br /&gt;
      &amp;amp; \left. \underset{({\color{Blue}4})}{7} \right)&lt;br /&gt;
      &amp;amp;&lt;br /&gt;
      &amp;amp;&lt;br /&gt;
  \end{matrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Sowohl &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt; als auch &amp;lt;math&amp;gt;colInd&amp;lt;/math&amp;gt; enthalten 7 Elemente, dies entspricht immer der Anzahl der Nichtnullelemente in &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;rowPtr&amp;lt;/math&amp;gt; hat 5 Elemente; die Anzahl der Elemente ist immer um 1 größer als die Anzahl der Zeilen von &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Das Element 0 hat den Wert 0, das letzte Element gibt die Größe von &amp;lt;math&amp;gt;colInd&amp;lt;/math&amp;gt; an, in diesem Fall 7.&lt;br /&gt;
&lt;br /&gt;
Die Rekonstruktion der Zeile 1 der Matrix aus der komprimierten Speicherform geschieht folgendermaßen: Die Elemente 1 und 2 des Vektors &amp;lt;math&amp;gt;rowPtr&amp;lt;/math&amp;gt; zeigen an, dass an der Stelle 2 der Vektoren &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;colInd&amp;lt;/math&amp;gt; die Zeile 1 und an der Stelle 4 die folgende Zeile beginnt. Die Zeile 1 hat also zwei von 0 verschiedene Elemente. Ihre Spaltenindizes stehen an den Stellen 2 und 3 von &amp;lt;math&amp;gt;colInd&amp;lt;/math&amp;gt;, ihre Werte an den entsprechenden Stellen in &amp;lt;math&amp;gt;val&amp;lt;/math&amp;gt;: 11 in der Spalte 2 und 13 in der Spalte 4.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Richard Barrett, Michael Berry, Tony F. Chan, James Demmel, June M. Donato, Jack Dongarra, Victor Eijkhout, Roldan Pozo, Charles Romine, Henk Van der Vorst: [https://netlib.org/templates/templates.pdf &amp;#039;&amp;#039;Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods.&amp;#039;&amp;#039;] (PDF; 762&amp;amp;nbsp;kB) 2. Auflage. S. 57&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Numerische Mathematik]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aka</name></author>
	</entry>
</feed>