pgfplotstableread{mydata.csv} VS table {mydata.csv} эффективность и возможности для CSV-файлов pgfplots

pgfplotstableread{mydata.csv} VS table {mydata.csv} эффективность и возможности для CSV-файлов pgfplots

Я пытаюсь построить очень большой файл .csv с несколькими столбцами с помощью pgfplots. Я хочу использовать первый столбец для всех моих графиков. Моя обычная процедура — делать что-то вроде:

\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.

Более подробная информация о разнице между повторным чтением файлов и их однократным чтением приведена в руководстве для ключа «полное чтение» (конечно, не самое лучшее место).

Связанный контент