
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 표현이 없습니다.
파일을 다시 읽는 것과 한 번 읽는 것의 차이점에 대한 자세한 내용은 "완전히 읽기" 키에 대한 매뉴얼에 문서화되어 있습니다(확실히 가장 좋은 지점은 아닙니다).