<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur]]></title><description><![CDATA[<p>Hallo,</p>
<p>Zum Problem:<br />
Ich habe eine Matrix (das ist wie eine 2D Tabelle) die entweder nur mit double-werten gefüllt ist ODER pro element mit 2 Double werten (wenn sie komplexwertig ist).<br />
Bsp:<br />
1.0 0.0 4.0<br />
4.4 0.0 0.0<br />
0.0 0.0 1.5</p>
<p>oder<br />
1.0 +9.5i 0.0 +0.0i ....</p>
<p>Desweiteren wird aus der Ausgangsmatrix immer nur ein Teil betrachtet der sich auch ändert. D.h einmal sind es die spalten 1-4 dann mal wieder 7-9 und so weiter. Ich speichere also nur einen Teil der Matrix.<br />
Ich will da über Templates gehen wegen den daten.</p>
<p>Ich dachte ich mache folgendes:</p>
<pre><code class="language-cpp">class Matrix
{    
      //hier einige public/private sachen die zur ganzen Matrix gehören

       //das sind die gestauchten Spalten der ausgansmatrix
       Lines lines;
};

class lines
{
   //hier einige public/privae sachen UND
   // ein 2Darray aus lauter werten
   rcv **arr; //2D array referenziert lauter arr_buf's
   rcv *arr_buf; //array das die templates trägt ,

};

//template struct
template&lt; type T &gt; struct rcv &lt; T &gt;
{
   int r; //Zeile
   int c; //Spalte
   T val; //Wert der ja auch complex sein kann.
};
</code></pre>
<p>Für weitere Vorschläge wäre ich sehr dankbar</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188563/idee-hilfe-bei-wahl-richtiger-datenstruktur</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 04:26:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188563.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 18:19:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Wed, 01 Aug 2007 18:19:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Zum Problem:<br />
Ich habe eine Matrix (das ist wie eine 2D Tabelle) die entweder nur mit double-werten gefüllt ist ODER pro element mit 2 Double werten (wenn sie komplexwertig ist).<br />
Bsp:<br />
1.0 0.0 4.0<br />
4.4 0.0 0.0<br />
0.0 0.0 1.5</p>
<p>oder<br />
1.0 +9.5i 0.0 +0.0i ....</p>
<p>Desweiteren wird aus der Ausgangsmatrix immer nur ein Teil betrachtet der sich auch ändert. D.h einmal sind es die spalten 1-4 dann mal wieder 7-9 und so weiter. Ich speichere also nur einen Teil der Matrix.<br />
Ich will da über Templates gehen wegen den daten.</p>
<p>Ich dachte ich mache folgendes:</p>
<pre><code class="language-cpp">class Matrix
{    
      //hier einige public/private sachen die zur ganzen Matrix gehören

       //das sind die gestauchten Spalten der ausgansmatrix
       Lines lines;
};

class lines
{
   //hier einige public/privae sachen UND
   // ein 2Darray aus lauter werten
   rcv **arr; //2D array referenziert lauter arr_buf's
   rcv *arr_buf; //array das die templates trägt ,

};

//template struct
template&lt; type T &gt; struct rcv &lt; T &gt;
{
   int r; //Zeile
   int c; //Spalte
   T val; //Wert der ja auch complex sein kann.
};
</code></pre>
<p>Für weitere Vorschläge wäre ich sehr dankbar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336775</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Wed, 01 Aug 2007 18:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Wed, 01 Aug 2007 19:16:00 GMT]]></title><description><![CDATA[<p>hoi</p>
<p>also ganz ehrlich gesagt weiß ich nicht genau was du willst.<br />
eine matrix koenntest du auch mit zwei vektoren anlegen</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Matrix
{
   public:
   typedef std::vector&lt;T&gt; line;

   line&amp; operator[](std::size_t pos) { return matrix[pos]; }

   private:
      std::vector&lt;line&gt; matrix;
};

Matrix&lt;double&gt; matrix1;
</code></pre>
<p>ist das sowas was du suchst ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336804</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Wed, 01 Aug 2007 19:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Wed, 01 Aug 2007 20:26:30 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> hab mir schon gedacht dass mich noch keiner versteht...<br />
ist ein bisschen schwierig das zu erklären auf die schnelle so.<br />
Also mir ist schon klar dass ich da einfach nur 2 arrays brauche. Mein Problem besteht darin, dass ich ein array nur mit den daten haben will, und eines nur mit den zeilen bzw. spaltenindizes. aus diesen indizes kann ich dann die werte ansprechen. Es ist dumm aber es geht so wirklich für mein Problem schneller.</p>
<p>ich versuchs mal an nem beispiel:</p>
<p>matrix :<br />
0 0 0<br />
3 0 0<br />
0 1 0<br />
6 0 0</p>
<p>2D array A =<br />
-&gt; 3 6 //1D array<br />
-&gt; 1 //1D array</p>
<p>//trägt nur die Zeilenindizes wo die werte stehen, das erste array gehört zur<br />
// ersten spalte, das zweite zur zweiten<br />
2D array ptrs =<br />
-&gt; 2 4 //1D array<br />
-&gt; 3 //1D array</p>
<p>bisschen freaky....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336842</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Wed, 01 Aug 2007 20:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 06:48:46 GMT]]></title><description><![CDATA[<p>re</p>
<p>ich glaub das ich dich nun verstanden habe.<br />
fuer die wahl der richtigen datenstruktur bzw. kontainer, muesstest du jedoch auch mal offen legen welchen kriterien die matrix unterlegen ist.<br />
brauchst du da auch direkten zugriff auf die daten ? wird haeufig geloescht oder hinzugefuegt. wie gross wird die matrix ueberhaupt sein ? kann man das von vornherein schon abschaetzen ?<br />
was willst du ueberhaupt machen ? welchen grund hat dein vorgehen ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337008</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 02 Aug 2007 06:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 09:37:07 GMT]]></title><description><![CDATA[<p>Vielen Dank für das Interesse an meinem Problem.<br />
Ich beantworte gerne die Fragen:</p>
<blockquote>
<p>brauchst du da auch direkten zugriff auf die daten?</p>
</blockquote>
<p>Falls Du meinst ob ich direkt auf die Werte zugreifen will und nicht nur über die Indizes: Dann ja</p>
<blockquote>
<p>wird haeufig geloescht oder hinzugefuegt.</p>
</blockquote>
<p>eher selten</p>
<blockquote>
<p>wie gross wird die matrix ueberhaupt sein ?</p>
</blockquote>
<p>Die matrix ist dünnbesetzt , d.h. die meisten einträge sind null- deswegen werden nur die nicht -Null einträge gespeichert. das führt dann zu array-grössen von z.B 100 - 50000. (Bei 10000x10000 wäre es ja insgesamt 10^8 !) Also kann man sagen ja: die arrays können groß werden.</p>
<blockquote>
<p>kann man das von vornherein schon abschaetzen ?</p>
</blockquote>
<p>Ja - der input ist eben eine solche matrix. Ich muss zuerst mal übers file laufen um mir die infos zu holen. Die dimension steht schon vorher fest. Das<br />
file beinhaltet also eine input matrix.</p>
<blockquote>
<p>was willst du ueberhaupt machen ? welchen grund hat dein vorgehen ?</p>
</blockquote>
<p>Puh - da müsste ich jetzt gewaltig ausholen: Prinzipiell hole ich mir eine Matrix und speichere mir nur die nicht-null einträge - das steht auch in dem file so drin - da sind nur nicht-null einträge vorhanden. Diese zeilen/spalten/value werte puffere ich mir also um damit arbeiten zu können.<br />
Aus meinem Werten (das sind wohlgemerkt nur die nicht-null einträge) extrahiere ich in einer for-schleife immer nur einen Teil der Matrix. Also z.B in iteration 1: spalten 1-4, dann in iteration 2: spalten 5-9 etc...<br />
Mit diesen Submatrizen hantiere ich jetzt rum - berechne ne QR-Zerlegung und pflantsche das Ergebnis in eine neue Matrix. Also mathematisches Zeug mache ich.<br />
Wichtig ist: es geht um &quot;optimalen&quot; code. D.h die Laufzeit ist erstes Kriterium.<br />
Und noch etwas: Der input kann sowohl komplex sein als auch nur real. Das was ich am anfang gepostet habe in meinem ersten post.</p>
<p>Ich weiß nicht ob ihr/Du mir da helfen könnt - aber über weitere Hilfe bin ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337133</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Thu, 02 Aug 2007 09:37:07 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 12:21:07 GMT]]></title><description><![CDATA[<p>re</p>
<p>so mal gucken ob ich das nun richtig verstanden habe.<br />
du hast eine datei, in welcher eine matrix bestimmter groesse (sprich bekannter groesse) gespeichert ist. jedoch nur die werte welche != 0 sind.<br />
dafuer haben sie jeweils zeile und spalte als angabe dabei.<br />
nun willst du die datei in den speicher laden um damit zu arbeiten. die komplette matrix wuerde jedoch zuviel speicher in anspruch nehmen, weshalb du auch im speicher nur die werte != 0 halten willst.<br />
damit du jedoch zuegig damit arbeiten kannst, brauchst du eine struktur, welche nur die werte != 0 enthaelt, aber nach aussen hin wie eine komplette matrix aussieht, damit du mit normalen indizies arbeiten kannst. ist das soweit korrekt ?<br />
sind die daten der matrix schon in einer bestimmten art vorsortiert ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337254</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 02 Aug 2007 12:21:07 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 12:51:08 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>Puh - da müsste ich jetzt gewaltig ausholen: Prinzipiell hole ich mir eine Matrix und speichere mir nur die nicht-null einträge - das steht auch in dem file so drin - da sind nur nicht-null einträge vorhanden. Diese zeilen/spalten/value werte puffere ich mir also um damit arbeiten zu können.<br />
Aus meinem Werten (das sind wohlgemerkt nur die nicht-null einträge) extrahiere ich in einer for-schleife immer nur einen Teil der Matrix. Also z.B in iteration 1: spalten 1-4, dann in iteration 2: spalten 5-9 etc...<br />
Mit diesen Submatrizen hantiere ich jetzt rum - berechne ne QR-Zerlegung und pflantsche das Ergebnis in eine neue Matrix. Also mathematisches Zeug mache ich.<br />
Wichtig ist: es geht um &quot;optimalen&quot; code. D.h die Laufzeit ist erstes Kriterium.<br />
Und noch etwas: Der input kann sowohl komplex sein als auch nur real. Das was ich am anfang gepostet habe in meinem ersten post.</p>
<p>Ich weiß nicht ob ihr/Du mir da helfen könnt - aber über weitere Hilfe bin ich sehr dankbar.</p>
</blockquote>
<p>Wenn es nur darum geht, ein dünn besetztes LGS schnell zu Lösen, verwende einfach</p>
<p>UMFPACK (<a href="http://www.cise.ufl.edu/research/sparse/umfpack/" rel="nofollow">http://www.cise.ufl.edu/research/sparse/umfpack/</a>)</p>
<p>oder Sparselib.</p>
<p>Wenn es jedoch um die eigentliche implementierung geht, google mach nach &quot;Compressed Row / Compressed Column Matrix&quot;</p>
<p>Gruss, Gast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337282</guid><dc:creator><![CDATA[Gast25250]]></dc:creator><pubDate>Thu, 02 Aug 2007 12:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 13:36:00 GMT]]></title><description><![CDATA[<blockquote>
<p>nun willst du die datei in den speicher laden um damit zu arbeiten. die komplette matrix wuerde jedoch zuviel speicher in anspruch nehmen, weshalb du auch im speicher nur die werte != 0 halten willst.<br />
damit du jedoch zuegig damit arbeiten kannst, brauchst du eine struktur, welche nur die werte != 0 enthaelt, aber nach aussen hin wie eine komplette matrix aussieht, damit du mit normalen indizies arbeiten kannst. ist das soweit korrekt ?<br />
sind die daten der matrix schon in einer bestimmten art vorsortiert ?</p>
</blockquote>
<p>jein: in der datei sind auch nur die nicht-nuller drin - aber die komplette dimension der matrix schon. Daraus weiß ich schon mal wie groß sie ist. Alle anderen Indizes sind ja Null die nicht in der datei über row column value angegeben sind.<br />
Nach außen hin muss es gar nicht so aussehen. Also intern muss ich halt aufpassen: Es gibt da z.B ne stelle wo ich eine kleine Submatrix aufbauen muss z.B aus den spalten 2-4 und da muss ich dann halt Nuller in das array an den richtigen positionen einfügen und die nicht-nuller halt anhand meiner gespeicherten Indizes. Also wenn du das mit nach außen hin meinst - dann ja-&gt;nach außen muss es als komplette Matrix gelten.<br />
Die Daten sind leider in keiner bestimmten Weise vorsortiert. Die können willkürlich im file rumliegen: Prinzipiell ist das file so aufebaut:</p>
<p>Im folgenden ist die erste Zahl der zeilenindex, die zweite zahl der spaltenindex und die dritte zahl der wert . Also r, c, v</p>
<p>dim_x dim_y<br />
2 3 5.99<br />
2 4 9,7<br />
4 7 8<br />
... ... ...</p>
<p>Ich nutze natürlich die Lapack-routinen die schneller gar nicht implementiert existieren - aber ich muss gewisse dinge mit meinen daten machen für die es noch nichts gibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Deswegen das ganze tratra</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337320</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Thu, 02 Aug 2007 13:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 15:03:10 GMT]]></title><description><![CDATA[<p>re</p>
<p>wuerde es reichen wenn du alle deiner werte in ein array rein tust.<br />
dann sortieren und dann mittels std::lower_bound oder so danach suchen wuerdest ?<br />
oder wie schnell waere fuer dich schnell genug ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337419</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 02 Aug 2007 15:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 18:58:08 GMT]]></title><description><![CDATA[<p>Hmm...naja es könnte evtl. alles in ein array rein. das sollte dann aber ein 2D array sein - pro spalte ein array im array.<br />
ich überlege gerade weiter ob ich irgendwo in teufels küche käme so....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337592</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Thu, 02 Aug 2007 18:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 19:00:24 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>Hmm...naja es könnte evtl. alles in ein array rein. das sollte dann aber ein 2D array sein - pro spalte ein array im array.<br />
ich überlege gerade weiter ob ich irgendwo in teufels küche käme so....</p>
</blockquote>
<p>Gibt es einen bestimmten grund dafuer ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337595</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 02 Aug 2007 19:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Idee&#x2F;Hilfe bei Wahl richtiger Datenstruktur on Thu, 02 Aug 2007 19:27:43 GMT]]></title><description><![CDATA[<p>also ich hab jetzt mal was gefunden was ich nachimplementieren will</p>
<p><a href="http://www.intel.com/software/products/mkl/docs/webhelp/appendices/mkl_appA_SMSF.html" rel="nofollow">http://www.intel.com/software/products/mkl/docs/webhelp/appendices/mkl_appA_SMSF.html</a></p>
<p>die section CSC Format!!!</p>
<p>so stehen da ja 3 arrays - jetzt weiß ich nicht ob es sinn machen würde nicht 3 einzelne arrays zu nehmen sondern z.B ein 2D array. Performance-technisch bin ich da unsicher.</p>
<p>Meine Idee wäre jetzt mal ein 2D array zu bauen, wo jedes element ein array ist das insgesamt eine Spalte der Matrix trägt. D.h ein struct mit r,c,v bauen und das dann ins array. Dieses array an position 1 des &quot;Hauptarrays&quot; wenn es die erste spalte der matrix ist.<br />
Zusätzlich könnte man noch ein 2tes array mitschleifen welches nur die Länge der einzelnen arrays wiedergibt.</p>
<p>Ich muss halt noch das mit dem complex-wertigen eingaben mittels templates verbauen...</p>
<p>Wahrscheinlich hängt das alles von meiner Anwendung ab und ihr könnt mir da wohl nicht wirklich weiter helfen - nichts desto trotz-danke euch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337618</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Thu, 02 Aug 2007 19:27:43 GMT</pubDate></item></channel></rss>