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(动态内存)结合使用效果很好,生成图表所需的时间并不长。但是,我决定改进我的编码(认为它也可以提高编译速度),只需在开始时使用以下代码读取一次表格即可:

\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 表示。

重新读取文件和读取一次文件之间的差异的更多细节已在手册中针对关键的“完全读取”进行了记录(当然不是最佳位置)。

相关内容