pgfplotstableread{mydata.csv} VS table {mydata.csv} の効率性と csv ファイルの機能 pgfplots

pgfplotstableread{mydata.csv} VS table {mydata.csv} の効率性と csv ファイルの機能 pgfplots

pgfplots を使用して、複数の列を持つ非常に大きな .csv ファイルをプロットしようとしています。すべてのプロットに最初の列を使用したいと思います。私の通常のルーチンは、次のようなことです。

\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};

この作業は LuaLatex (動的メモリ) と組み合わせるとうまくいき、プロットを生成するのにそれほど時間がかかりません。ただし、最初にテーブルを 1 回だけ読み取るようにコーディングを改善することにしました (コンパイル速度も向上すると思います)。

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

その後:

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

これを実行すると、プロセスに非常に長い時間がかかり、コンパイルされずにクラッシュすることもあります。コンパイル速度に大きな違いがある理由とクラッシュの原因を誰か説明してもらえますか?

申し訳ありませんが、良い例がないので、データを共有できません(とにかくデータが非常に大きいです)。

ありがとう =)

PD 列内の範囲も選択したいので、このソリューションを使用します行テーブル pgfplots を選択これも問題を引き起こす可能性があるかどうかはわかりません。

答え1

あなたの観察は正しいです。同じファイルを複数回再読み取りする方が、「ファイル ハンドル」を再利用するよりも大幅に効率が上がります。

この予期しない動作の原因は、TeX でのプログラミングの仕組み (または、この場合は機能しない) に関係しています。つまり、(効率的な) 配列データ型が存在しないのです。配列データ型を実装する唯一の方法は、「通常の」グローバル マクロ スペースを使用することですが、その結果 (結果として) メモリ消費量が大幅に増加し、TeX の厳しい制限に簡単に達してしまいます。

Lua には効率的な配列データ型がありますが、テーブル用の pgfplots コアにはまだ専用の Lua 表現がありません。

ファイルの再読み取りと 1 度読み取りの違いに関する詳細は、キー「完全に読み取り」のマニュアルに記載されています (最適な場所ではないことは確かです)。

関連情報