<?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[Optimales Array für Datensatz]]></title><description><![CDATA[<p>Hallo zusammen,<br />
hab nochmals eine Frage an euch. Es geht um die Speicherung großer Datenmengen; kurz es geht um ein Verbrennungsmodell, dass ich numerisch betrachte; alle thermodynamischen Größen werden in diesem Modell vor ab berechnet und in Tabellen gepeichert. Wichtig ist nur, das die Größen abhängig sind von vier größen ist:<br />
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ϕ</mi><mo>=</mo><mi>f</mi><mo>(</mo><mi>ζ</mi><mo separator="true">,</mo><mi>χ</mi><mo separator="true">,</mo><mi>Z</mi><mo separator="true">,</mo><mi>Z</mi><mi>v</mi><mi>a</mi><mi>r</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">\phi = f(\zeta, \chi, Z, Zvar)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">ϕ</span><span class="mrel">=</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right:0.07378em;">ζ</span><span class="mpunct">,</span><span class="mord mathit">χ</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mord mathit" style="margin-right:0.03588em;">v</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mclose">)</span></span></span></span></p>
<p>Zur Vereinfachung hab ich einfach eine kurze Tabelle erstellt (die <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ζ</mi></mrow><annotation encoding="application/x-tex">\zeta</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.07378em;">ζ</span></span></span></span> nicht beinhaltet und auch nur sehr kurz ist.</p>
<pre><code>#   chi     Z      Zvar    PHI
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1e-6    0       0       x
    1e-6    0       0.1     x
    1e-6    0       0.2     x
    1e-6    0       0.3     x
    1e-6    0       0.4     x
    .
    .
    .

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1e-6    0.2     0       x
    1e-6    0.2     0.1     x
    1e-6    0.2     0.2     x
    1e-6    0.2     0.3     x
    1e-6    0.2     0.4     x
    .
    .
    .

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    2e-6    0       0       x
    2e-6    0       0.1     x
    2e-6    0       0.2     x
    2e-6    0       0.3     x
    2e-6    0       0.4     x
    .
    .
    .

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    2e-6    0.2     0       x
    2e-6    0.2     0.1     x
    2e-6    0.2     0.2     x
    2e-6    0.2     0.3     x
    2e-6    0.2     0.4     x
</code></pre>
<p>Mit den Werten wird nichts mehr im Array gemacht. In meiner Berechnung bekomme ich dann Werte für die vier Variablen und dann muss ich die Nachbarstellen finden, und interpolieren (kein Thema).</p>
<p>Frage ist nur wie ich diesen Datensatz am Besten speichere. Wäre es sinnvoll es in einem vector zu speichern? Beispiel:</p>
<pre><code>vector&lt;vector&lt;vector&lt;vector&lt;double&gt; &gt; &gt; &gt; Foo;
</code></pre>
<p>Oder gibt es hier bessere alternativen?<br />
Wäre über jeden konstruktiven Beitrag dankbar <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="🙂"
    /></p>
<p>Grüße Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/331130/optimales-array-für-datensatz</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 22:19:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331130.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Feb 2015 08:52:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 08:54:38 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
hab nochmals eine Frage an euch. Es geht um die Speicherung großer Datenmengen; kurz es geht um ein Verbrennungsmodell, dass ich numerisch betrachte; alle thermodynamischen Größen werden in diesem Modell vor ab berechnet und in Tabellen gepeichert. Wichtig ist nur, das die Größen abhängig sind von vier größen ist:<br />
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ϕ</mi><mo>=</mo><mi>f</mi><mo>(</mo><mi>ζ</mi><mo separator="true">,</mo><mi>χ</mi><mo separator="true">,</mo><mi>Z</mi><mo separator="true">,</mo><mi>Z</mi><mi>v</mi><mi>a</mi><mi>r</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">\phi = f(\zeta, \chi, Z, Zvar)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">ϕ</span><span class="mrel">=</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right:0.07378em;">ζ</span><span class="mpunct">,</span><span class="mord mathit">χ</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mord mathit" style="margin-right:0.03588em;">v</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mclose">)</span></span></span></span></p>
<p>Zur Vereinfachung hab ich einfach eine kurze Tabelle erstellt (die <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ζ</mi></mrow><annotation encoding="application/x-tex">\zeta</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.07378em;">ζ</span></span></span></span> nicht beinhaltet und auch nur sehr kurz ist.</p>
<pre><code>#   chi     Z      Zvar    PHI
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1e-6    0       0       x
    1e-6    0       0.1     x
    1e-6    0       0.2     x
    1e-6    0       0.3     x
    1e-6    0       0.4     x
    .
    .
    .

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1e-6    0.2     0       x
    1e-6    0.2     0.1     x
    1e-6    0.2     0.2     x
    1e-6    0.2     0.3     x
    1e-6    0.2     0.4     x
    .
    .
    .

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    2e-6    0       0       x
    2e-6    0       0.1     x
    2e-6    0       0.2     x
    2e-6    0       0.3     x
    2e-6    0       0.4     x
    .
    .
    .

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    2e-6    0.2     0       x
    2e-6    0.2     0.1     x
    2e-6    0.2     0.2     x
    2e-6    0.2     0.3     x
    2e-6    0.2     0.4     x
</code></pre>
<p>Mit den Werten wird nichts mehr im Array gemacht. In meiner Berechnung bekomme ich dann Werte für die vier Variablen und dann muss ich die Nachbarstellen finden, und interpolieren (kein Thema).</p>
<p>Frage ist nur wie ich diesen Datensatz am Besten speichere. Wäre es sinnvoll es in einem vector zu speichern? Beispiel:</p>
<pre><code>vector&lt;vector&lt;vector&lt;vector&lt;double&gt; &gt; &gt; &gt; Foo;
</code></pre>
<p>Oder gibt es hier bessere alternativen?<br />
Wäre über jeden konstruktiven Beitrag dankbar <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="🙂"
    /></p>
<p>Grüße Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442386</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Thu, 12 Feb 2015 08:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 09:15:47 GMT]]></title><description><![CDATA[<p>Ich verstehe nicht, was dein Vector von Vector von Vector von Vector von Double mit der Tabelle zu tun haben soll.</p>
<pre><code class="language-cpp">struct A
{
double chi;
double z;
double zvar;
double phi;
};
std::vector&lt;A&gt; v;
</code></pre>
<p>würde mir da eher einfallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442390</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 12 Feb 2015 09:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 09:31:58 GMT]]></title><description><![CDATA[<p>Ja, du willst ja einzelne Zeilen bzw. damit zusammengehörige Datensätze speichern. Und dir (anschaulich beschrieben) nicht eine 4 dimensionale diskrete Struktur aufbauen (was eben ein 4 dimensionaler Vector ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442393</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 12 Feb 2015 09:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 09:44:28 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>danke für eure Antworten. Ich hab das mal kurz, schlicht und simple hier dargestellt: <a href="http://www.holzmann-cfd.de/cppForum/Extraction.pdf" rel="nofollow">http://www.holzmann-cfd.de/cppForum/Extraction.pdf</a></p>
<p>Also ich habe wirklich eine vier-dimensionales Array und ich mach auch eine 4d-Interpolation. Jedoch macht das mit der Struct wesentlich mehr Sinn und scheint einfacher zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442395</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Thu, 12 Feb 2015 09:44:28 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 10:06:58 GMT]]></title><description><![CDATA[<p>Wie die Sturktur gerade ist:</p>
<pre><code>[code]
</code></pre>
<p>├── LUT0<br />
│   ├── LookUpTable.out<br />
│   ├── SR_10.bin<br />
│   ├── SR_11.bin<br />
│   ├── SR_12.bin<br />
│   ├── SR_13.bin<br />
│   ├── SR_14.bin<br />
│   ├── SR_15.bin<br />
│   ├── SR_16.bin<br />
│   ├── SR_17.bin<br />
│   ├── SR_18.bin<br />
│   ├── SR_1.bin<br />
│   ├── SR_2.bin<br />
│   ├── SR_3.bin<br />
│   ├── SR_4.bin<br />
│   ├── SR_5.bin<br />
│   ├── SR_6.bin<br />
│   ├── SR_7.bin<br />
│   ├── SR_8.bin<br />
│   └── SR_9.bin<br />
├── LUT-100<br />
│   ├── LookUpTable.out<br />
│   ├── SR_10.bin<br />
│   ├── SR_11.bin<br />
│   ├── SR_12.bin<br />
│   ├── SR_13.bin<br />
│   ├── SR_14.bin<br />
│   ├── SR_15.bin<br />
│   ├── SR_16.bin<br />
│   ├── SR_17.bin<br />
│   ├── SR_18.bin<br />
│   ├── SR_1.bin<br />
│   ├── SR_2.bin<br />
│   ├── SR_3.bin<br />
│   ├── SR_4.bin<br />
│   ├── SR_5.bin<br />
│   ├── SR_6.bin<br />
│   ├── SR_7.bin<br />
│   ├── SR_8.bin<br />
│   └── SR_9.bin<br />
└── LUT+100<br />
├── LookUpTable.out<br />
├── SR_10.bin<br />
├── SR_11.bin<br />
├── SR_12.bin<br />
├── SR_13.bin<br />
├── SR_14.bin<br />
├── SR_15.bin<br />
├── SR_16.bin<br />
├── SR_17.bin<br />
├── SR_18.bin<br />
├── SR_1.bin<br />
├── SR_2.bin<br />
├── SR_3.bin<br />
├── SR_4.bin<br />
├── SR_5.bin<br />
├── SR_6.bin<br />
├── SR_7.bin<br />
├── SR_8.bin<br />
└── SR_9.bin<br />
[/code]</p>
<p>LUT -&gt; <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>ζ</mi><mi>x</mi></msub></mrow><annotation encoding="application/x-tex">\zeta_x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit" style="margin-right:0.07378em;">ζ</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.07378em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">x</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span><br />
SR_x -&gt; <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>χ</mi><mi>x</mi></msub></mrow><annotation encoding="application/x-tex">\chi_x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit">χ</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:0em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">x</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span><br />
und in den Dateien ist dann jede Größe <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ϕ</mi><mo>=</mo><mi>f</mi><mo>(</mo><mi>Z</mi><mo separator="true">,</mo><mi>Z</mi><mi>v</mi><mi>a</mi><mi>r</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">\phi = f(Z,Zvar)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">ϕ</span><span class="mrel">=</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mord mathit" style="margin-right:0.03588em;">v</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mclose">)</span></span></span></span></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442397</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Thu, 12 Feb 2015 10:06:58 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 12:50:21 GMT]]></title><description><![CDATA[<p>Nach dem Bild in deinem pdf schätze ich, daß eine map wohl ne gute Lösung wäre.</p>
<p>Mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442421</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Thu, 12 Feb 2015 12:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 12:54:39 GMT]]></title><description><![CDATA[<p>Hallo Martin,</p>
<p>also mit dem vector&lt;vector&lt;vector&lt;vector&lt;double&gt; &gt; &gt; &gt; funktioniert es ja, wollte aber mal nachfragen ob es eine schönere Lösung gibt. Ich schau mir das mit der &quot;map&quot; mal an. Dankeschön für das Feedback.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442423</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Thu, 12 Feb 2015 12:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 20:36:46 GMT]]></title><description><![CDATA[<p>Ist das eine gute Idee, die Werte überhaupt zu speichern? Wenn du interpolieren willst, brauchst du schließlich nicht alle Werte gleichzeitig, sondern bloß ein paar Nachbarn. Deren Werte berechnest du, machst, was auch immer du mit diesen Werten machen möchtest, und merkst dir am Ende ein paar der Werte am Rand. Dann berechnest du die Werte von deren Nachbarn. Und so weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442508</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 12 Feb 2015 20:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 20:56:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30163">@Shor-ty</a><br />
Möglichkeiten gibt es viele.<br />
Um hier die &quot;optimale&quot; zu finden, müsste man wissen wie auf die Daten zugegriffen werden soll.<br />
Also z.B. wie viele Lookups du machst, und ob es Muster gibt - also z.B. ob sich die &quot;Koordinaten&quot; der Zugriffe von einem zum nächsten nach einem bestimmten Schema ändern.</p>
<p>Bzw. genau so ob die Sample-Abstände der einzelnen Dimensionen immer gleich sind. Also ob der Abstand auf der &quot;Zvar&quot; Achse zwischen zwei Samples immer 0.1 ist.<br />
Dann müsste man die Parameter nämlich z.B. überhaupt nicht speichern, bzw. nur die Parameter für das Sample (0,0,0,0) + halt die Deltas für die 4 Parameter.</p>
<p>Und auch: auf was genau willst du optimieren? Auf einfach &amp; übersichtlich, oder auf schnelle Zugriffe?<br />
(Falls auf einfach &amp; übersichtlich entfällt natürlich die Frage nach dem Zugriffsmuster oben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442512</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Feb 2015 20:56:38 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 22:03:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für deine Antwort. Zu deinen Fragen. Wir bewegen uns in der numerischen Strömungsmechanik, bei der je nach Problemstellung und Design mehrere Millionen Zellen vorhanden sein können. Für jede Zelle wird bei jedem Zeitschritt über Erhaltungsgleichungen (Transportgleichungen) der Wert von</p>
<p>Z<br />
Zvar<br />
Zeta<br />
Chi</p>
<p>geändert. Diese Werte sind willkürlich (natürlich mit Beschränktheiten wie bspw. Z und Zvar definiert zwischen [0:1] wobei alle Werte vorkommen. Mit diesen Werten extrahiere ich dann thermodynamische Eigenschaften, die ich vorher Berechnet habe (das Modell ist bereits vorliegend, jedoch nicht sauber implementiert).</p>
<p>Die thermodynamischen Eigenschaften sind natürlich nur an diskteten Stellen vorhanden. Für jede Zelle muss dann ein Interpolationsverfahren durchgeführt werde. Somit muss sehr häufig auf dieses Array zugegriffen werden. Wenn es interessiert kann nachfolgend die Interpolationshierarchie einsehen: <a href="http://www.holzmann-cfd.de/images/openfoam/softwareentwicklung/flameletModell/Extraktionsverfahren.png" rel="nofollow">http://www.holzmann-cfd.de/images/openfoam/softwareentwicklung/flameletModell/Extraktionsverfahren.png</a></p>
<p>Soweit dazu.<br />
Anzumerken ist, dass dieses Modell (auch wenn mit vielen Zugriffen auf die Thermodynamischen Datenbanken) bereits um ein vielfaches schneller ist als normale Modelle. Ist nämlich ein Verbrennugnsmodell und die komplexen chemischen Gleichungen zu berechnen kostet wesentlich mehr als mit den Tabellen.</p>
<p>Die Abstände sind nicht einheitlich (sondern nur in meinem Beispiel fiktiv angenommen). Bspw. kann sich die Z Achse [0:1] wie folgt verhalten:</p>
<pre><code>.       .     .     .  .  . ... . . .    .    .      .       .      .
</code></pre>
<p>Hier soll der Abstand der Punkte die Intervallgröße darstellen (nur zur Vorstellung).</p>
<p>Zu Beginn möchte ich sehr sauber und übersichtlich Programmieren, dass ggf. im späteren Verlauf mit einer Optimierung versehen wird (aus reinem Interesse und wenn mir die Zeit dazu bleibt).</p>
<p>Zudem möchte ich so viel wie möglich von der namespace FOAM verwenden, da ich bei den Programmierern anfragen möchte, ob dieses Modell als offizielles Modell implementiert wird.</p>
<p>Hoffe deine Fragen beantwortet zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442518</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Thu, 12 Feb 2015 22:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 22:46:06 GMT]]></title><description><![CDATA[<blockquote>
<p>Die Abstände sind nicht einheitlich (sondern nur in meinem Beispiel fiktiv angenommen). Bspw. kann sich die Z Achse [0:1] wie folgt verhalten: (...)</p>
</blockquote>
<p>OK. Verstanden soweit. Das führt zur nächsten Frage:<br />
Liegen die Samples auf einem &quot;rechtwinkeligen&quot; Grid, wobei jeder Grid-Punkt auch &quot;ausgefüllt&quot; ist?<br />
(Weiss nicht wie ich das anders beschreiben soll, mir fehlen da die nötigen mathematischen/physikalischen Fachausdrücke)</p>
<p>Also...<br />
Wenn es einen Punkt mit Z = 0.1 gibt, und einen anderen Punkt mit Chi = 42, gibt es dann auch immer einen Punkt mit Z = 0.1 und Chi = 42? Und das für alle möglichen Werte aller vier Parameter? (Anhand deines PDFs vermute ich mal: ja, gibt es.)<br />
Bzw. man könnte das auch einfach als 4-dimensionalen &quot;Daten-Cube&quot; bezeichnen.</p>
<p>Oder ist es eine komplett freie Punktwolke?</p>
<p>Grund der Frage: wenn ich dich richtig verstanden habe, dann willst (musst) du zu einem Koordinaten-Quadruple die nächstgelegenen 4 Samples finden. Und das bei mehreren Millionen einträgen und sehr sehr oft.</p>
<p>Wenn man das für eine &quot;komplett freie Punktwolke&quot; straight-forward implementiert, dann ist das reichlich langsam. Dazu müsstest du nämlich die Distanz jedes Samples zum gegebenen Koordinaten-Quadruple berechnen (für alle Samples!), und dann die vier Samples mit dem kleinsten Abstand raussuchen. Das wäre O(N). Und das für jedes Koordinaten-Quadruple. Also sehr sehr oft. Also sehr sehr langsam.</p>
<p>Um sowas schnell zu bekommen bräuchtest du nen &quot;spatial index&quot; - also z.B. nen Octree (bzw. bei dir dann 16-Tree).</p>
<p>Wenn es aber ist wie ich vermute, dann wäre mMn. eine gute Darstellung im Speicher:</p>
<pre><code class="language-cpp">vector&lt;double&gt; z_values;      // Werte entlang der Z-Achse des Cubes (sortiert)
vector&lt;double&gt; zvar_values;   // Werte entlang der Zvar-Achse des Cubes (sortiert)
vector&lt;double&gt; zeta_values;   // Werte entlang der Zeta-Achse des Cubes (sortiert)
vector&lt;double&gt; chi_values;    // Werte entlang der Chi-Achse des Cubes (sortiert)
vector&lt;double&gt; values;        // Samples im Cube
</code></pre>
<p><code>values</code> würde dabei dann <code>z_values.size() * zvar_values.size() * zeta_values.size() * chi_values.size()</code> Einträge enthalten.</p>
<p>Den Messwert zu <code>z_values[A]</code> , <code>zvar_values[B]</code> , <code>zeta_values[C]</code> und <code>chi_values[D]</code> legst du dann unter <code>index = A + (B * z_values.size()) + (C * z_values.size() * zvar_values.size()) + (D * z_values.size() * zvar_values.size() * zeta_values.size())</code> ab.</p>
<p>Das ist halbwegs einfach und spart Speicher.</p>
<p>Zum Raussuchen eines Werts würdest du über ne binäre Suche erstmal die <code>z_values</code> Indexe der beiden benachbarten Z-Werte raussuchen,<br />
dann die <code>zvar_values</code> Indexe der beiden benachbarten Zvar Werte, und das selbe für Zeta und Chi.<br />
Dann hast du 8 Indexe mit denen du dir die 16 Nachbarn aus dem <code>values</code> Vektor rausholen kannst.</p>
<p>Also im Prinzip sehr ähnlich zu deiner <code>vector&lt;vector&lt;vector&lt;vector&lt;double&gt; &gt; &gt; &gt;</code> Variante. Nur halt mit einem einzigen nicht verschachtelten <code>vector</code> . Weil verschachtelte Vektoren pfui sind (und auch ein Stück langsamer als die von mir skizzierte Variante) <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="🙂"
    /></p>
<p>@manni66<br />
Ist ne 4-Dimensionale Tabelle. Nicht Tabelle im Sinn von Datenbank-Tabelle, sondern im Sinn von ... naja, &quot;Tabelle&quot; halt <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="🙂"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24458">@mgaeckler</a><br />
Wieso ne map?<br />
Wie willst du darin vernünftig nen Lookup machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442520</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 12 Feb 2015 22:46:06 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Thu, 12 Feb 2015 23:09:18 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>also so wie ich dich verstanden habe, läuft es eigentlich fast schon so hinaus, wie ich da gerade dabei bin das zu implementieren. Es ist halt immer etwas schwer sich das vorzustellen 4d - Raum (für andere). Da ich darin schon länger arbeite ist das klar. Wenn es interessiert: Die Z und Zvar spannen eine Oberfläche im 3D - Raum auf. Somit gilt:<br />
<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ϕ</mi><mo>=</mo><mi>f</mi><mo>(</mo><mi>Z</mi><mo separator="true">,</mo><mi>Z</mi><mi>v</mi><mi>a</mi><mi>r</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">\phi = f(Z,Zvar)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1em;vertical-align:-0.25em;"></span><span class="base textstyle uncramped"><span class="mord mathit">ϕ</span><span class="mrel">=</span><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.07153em;">Z</span><span class="mord mathit" style="margin-right:0.03588em;">v</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mclose">)</span></span></span></span><br />
Stichwort hier ist eine <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>β</mi></mrow><annotation encoding="application/x-tex">\beta</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.05278em;">β</span></span></span></span>-PDF. Chi ist zusammenhängend über eine Log-Normal-PDF und Zeta eine Delta Function (nur wen es interessiert).</p>
<p>&quot;Grob&quot; gesagt sieht das wie folgt aus: <a href="http://www.holzmann-cfd.de/images/openfoam/softwareentwicklung/flameletModell/Interpolationsverfahren.png" rel="nofollow">http://www.holzmann-cfd.de/images/openfoam/softwareentwicklung/flameletModell/Interpolationsverfahren.png</a>.</p>
<p>Z definiert [0:1]<br />
Zvar definiert [0:0,25] bzw. normiert auch [0:1]<br />
Chi definiert [0:<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi mathvariant="normal">∞</mi></mrow><annotation encoding="application/x-tex">\infty</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathrm">∞</span></span></span></span>]<br />
zeta definiert [<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mo>−</mo><mi mathvariant="normal">∞</mi></mrow><annotation encoding="application/x-tex">-\infty</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.58333em;"></span><span class="strut bottom" style="height:0.66666em;vertical-align:-0.08333em;"></span><span class="base textstyle uncramped"><span class="mord">−</span><span class="mord mathrm">∞</span></span></span></span>:<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi mathvariant="normal">∞</mi></mrow><annotation encoding="application/x-tex">\infty</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.43056em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathrm">∞</span></span></span></span>]</p>
<p>Zurück zum eigentlichen Thema <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="🙂"
    /><br />
Also dein Vorschlag ähnelt meinem mit dem &quot;vector&lt;vector&lt;vector&lt;vector&lt;double&gt; &gt; &gt; &gt;&quot;, also war das von mir schon mal gar kein » soo « schlechter Ansatz. Ich werde mir morgen das von dir nochmals durchsehen, da es jetzt schon etwas spät geworden ist und ich nicht mehr wirklich aufnahmefähig bin <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="🙂"
    /></p>
<p>Grüße Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442522</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Thu, 12 Feb 2015 23:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to Optimales Array für Datensatz on Fri, 13 Feb 2015 07:56:37 GMT]]></title><description><![CDATA[<p>hustbear schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24458">@mgaeckler</a> Wieso ne map? Wie willst du darin vernünftig nen Lookup machen?</p>
</blockquote>
<p>Ich habe die grafik in der pdf so verstanden, dass zu jeden Messwert n Messwerte der Spalte rechts daneben ist. Das kann mit einer map modeliert werden. Key ist double und die werte sind vector. Darfst halt kein unorderd map nehmen. Sonnst wirds langsam.</p>
<p>Map &lt;double, vector &lt; map &lt; double ...</p>
<p>Mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2442535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2442535</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Fri, 13 Feb 2015 07:56:37 GMT</pubDate></item></channel></rss>