pgfplotstableread{mydata.csv} VS table {mydata.csv} Effizienz und Leistungsfähigkeit für CSV-Dateien pgfplots

pgfplotstableread{mydata.csv} VS table {mydata.csv} Effizienz und Leistungsfähigkeit für CSV-Dateien pgfplots

Ich versuche, mit pgfplots eine sehr große CSV-Datei mit mehreren Spalten zu plotten. Ich möchte die erste Spalte für alle meine Plots verwenden. Normalerweise mache ich so etwas wie:

\addplot [solid] table [x=A,y=B]{mydata.cvs};
\addplot [solid] table [x=A,y=C]{mydata.cvs};
\addplot [solid] table [x=A,y=nth]{mydata.cvs};

Dies funktioniert gut in Kombination mit LuaLatex (dynamischer Speicher) und das Generieren des Diagramms dauert nicht so lange. Ich habe mich jedoch entschieden, meinen Code zu verbessern (ich denke, dass dies auch die Kompilierungsgeschwindigkeit erhöhen könnte), indem ich die Tabelle am Anfang nur einmal lese und Folgendes verwende:

\pgfplotstableread[col sep=semicolon]{mydata.csv}\mytableone

und dann:

\addplot [solid] table [x=A,y=B]{\mytableone};
\addplot [solid] table [x=A,y=C]{\mytableone};
\addplot [solid] table [x=A,y=nth]{\mytableone};

Danach dauert der Vorgang VIEL länger und manchmal wird er nicht einmal kompiliert und stürzt ab. Kann mir jemand erklären, warum es einen großen Unterschied in der Kompilierungsgeschwindigkeit gibt und was die Ursache für den Absturz sein könnte?

Tut mir leid, aber ich habe kein gutes Beispiel und kann meine Daten nicht weitergeben (sie sind sowieso sehr groß).

Danke =)

PD Ich möchte auch einen Bereich in der Spalte auswählen, dafür verwende ich diese LösungZeilentabelle auswählen pgfplots. Nicht sicher, ob das auch Probleme verursachen kann.

Antwort1

Ihre Beobachtung ist richtig: Das mehrmalige erneute Lesen derselben Datei ist wesentlich skalierbarer als die Wiederverwendung eines „Dateihandles“.

Der Grund für dieses unerwartete Verhalten hängt damit zusammen, wie die Programmierung in TeX funktioniert (oder in diesem Fall nicht funktioniert): Es gibt einfach keinen (effizienten) Array-Datentyp. Die einzige Möglichkeit, Array-Datentypen zu implementieren, besteht darin, den „normalen“, globalen Makroraum zu verwenden, was zu einem viel höheren Speicherverbrauch führt und schnell an die strengen Grenzen von TeX stößt.

Lua hätte effiziente Array-Datentypen, aber der pgfplots-Kern für Tabellen hat noch keine dedizierte Lua-Darstellung.

Einige weitere Details zum Unterschied zwischen dem erneuten Einlesen von Dateien und dem einmaligen Einlesen sind im Handbuch zum Schlüssel „komplett lesen“ dokumentiert (sicherlich nicht die beste Stelle).

verwandte Informationen