
Я пытаюсь построить очень большой файл .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.
Более подробная информация о разнице между повторным чтением файлов и их однократным чтением приведена в руководстве для ключа «полное чтение» (конечно, не самое лучшее место).