나중에 Paraview (.vtu 또는 vtk 파일)에서 읽을 계산 데이터를 작성해야합니다.
파일 크기와 관련하여 ASCII 형식 또는 바이너리 형식을 선택해야합니까?
답변
당신의 유일한 걱정이 파일 크기라면, 당신은 바이너리 파일을 원합니다. 예를 들어, 1 개의 배정 밀도 부동 소수점 숫자를 파일에 쓰고 있다고 가정 해 보겠습니다. 파일 시스템이이를 완벽하게 처리 할 수 있고 파일, 헤더 및 패딩이 모두 0이라고 가정합니다.
바이너리 파일의 경우이 숫자는 RAM에있는 숫자의 정확한 크기를 취합니다. 또는 8 바이트입니다.
ASCII 형식에서는 다음을 유지합니다.
- 16 자리 숫자
- 소수점 1 개
- 지수를 구분하기위한 1 자
- 지수 부호를위한 1 자
- 지수를위한 2-3 자
가정 한 문자에 1 바이트 만 사용합니다. 즉, 동일한 숫자를 유지하는 데 22 바이트입니다. 이것은 숫자를 구분하는 데 필요한 문자를 계산하지 않습니다 (보통 1 이상). 따라서 ASCII 형식의 파일 크기는 약 3 배 더 큽니다.
저장된 파일의 정밀도를 위해 파일 크기를 바꿀 수 있습니다 (기본에 5-6 자리 만 유지). 당신은 그들을 사용하고 있습니다. ASCII의 주요 장점은 사람이 읽을 수있는 데이터를 디버깅하거나 생성하는 것입니다.
댓글
- 과학 분야에서 또한 중요한 것은 장기 보관 및 신뢰성입니다. 이것이 바로 '의 비효율성에도 불구하고 ASCII CSV가 널리 퍼져 있고 권장되고 (PDF) 되는 이유입니다.
- 또 다른 유용한 점은 ASCII CSV 인코딩이 ' 매우 효율적이지 않지만 ascii에서 파일 압축 유틸리티 (예 : zip, gzip 등)를 사용한다는 것입니다. 파일은 일반적으로 이진 파일의 크기와 비슷한 크기로 파일 크기를 줄입니다.
- 일부 입력 / 출력 라이브러리는 충분히주의하지 않으므로주의하십시오. ' ASCII로 IEEE 배정 밀도 숫자를 출력 한 다음 다시 읽을 때 비트 재현성을 위해 비트를 얻으려면. 제 경험상 안전을 위해 17 또는 18 자리 십진수를 사용해야하는 경우가 있습니다.
- horchler 관련 ' 댓글 : 저는 ' HDF5와 같이 잘 사용되는 표준화 된 개방형 바이너리 형식이 오랫동안있을 것이라고 확신합니다. 이것이 ' ' 개인적으로 권장하는 것입니다.
- + 정확성을 위해 가능한 한 바이너리를 고수합니다. 컴팩트 함, 마음의 평화 및 (특히) 속도. 그러면 더 콤팩트 함이 필요하면 지퍼를 열 수 있습니다. 내용을 시각적으로 읽을 수 있어야한다면 약간의 프로그램을 작성할 수 있습니다. 반면에 ' 시각적 인 것이 더 중요하고 Excel, R 등과 같은 임의의 프로그램으로 쉽게 전달되는 경우 CSV를 사용하는 것이 좋습니다.
li>
Answer
실제로는 3 개보다 더 정확한 시각화 파일의 데이터가 거의 필요하지 않습니다. 이 경우 ASCII는 놀랍게도 바이너리 형식보다 더 간결합니다. “아카이빙에 대해 생각하고 있다면 이러한 ASCII 파일을 bzip으로 압축하면 얻을 수있는 가장 작은 파일을 얻을 수 있습니다.
즉, Paraview는 압축 된 바이너리 형식 (XML 기반이지만 데이터가 먼저 libz 압축 된 다음 다시 uuencoded되어 ASCII 텍스트를 생성 함)을 갖는 VTU 형식을 읽습니다. 일반적인 파일에서 이것은 4-10의 요소를 절약합니다. 대용량 파일의 경우이 방법을 사용하는 것이 좋습니다.
댓글
- 다른 답변과는 대조적으로이 항목에 투표했습니다. 저도 ' 어느 쪽이든 강한 의견을 갖고 있지는 않지만 ' 여기에 좋은 점이 있습니다.
- 또는 명시 적으로 하위 비트를 0으로 만들고 바이너리를 압축합니다.
- 와, 약간의 조작이 필요합니다. 아니면 그 기능이 있습니까? (플로팅으로 캐스트하고 다시 더블로 캐스팅하는 것 제외)
답변
tl; dr- utf8 에 파일을 저장합니다. 표 형식이면 TAB으로 구분 된 값을 사용하세요.
올바른 옵션은 다음과 같습니다.
- utf8 텍스트 ( ASCII 아님 . 우리는 모두 미국 영어 사용자가 아닙니다)
- 바이너리
ASAICT 바이너리 파일의 유일한 장점은 성능입니다. 나가는 도중에 텍스트를 생성하거나 들어오는 도중에 파싱하는 것보다 메모리 덤프를 메모리에로드하는 것이 훨씬 빠릅니다.
또는 여기 : https://auth0.com/blog/beating-json-performance-with-protobuf/ (이것은 과학적이지 않으며 전반적인 성능에 대해 논의하고 있습니다. 큰 차이는 전송 된 데이터의 양과 텍스트 데이터에 편향된 경우의 구문 분석 시간입니다. )
바이너리 파일 형식이 유니 코드 텍스트를 제대로 지원할 가능성이 낮으므로 데이터 무결성에 관심이 있다면 바이너리를 사용하지 마세요. . 엔디안 문제에 대해서도 들어 보셨습니까? 부호있는 정수와 부동 소수점의 다른 이진 표현이 있습니까?
-100000 및 -1e + 6의 텍스트 표현은 값에 따라 값이 변경되지 않습니다. (어쨌든 utf-8 및 ASCII에서).
바이너리 파일을 이해하는 프로그램이 여전히 파일을 이해하거나 50 년 후에도 실행될 가능성은 알 수 없습니다. . 장수에 관심이 있다면 바이너리를 사용하지 마세요. .
다른 프로그램에서 바이너리 데이터를 읽는 것이 어려운 경우가 많으므로 상호 운용성을 고려한다면 바이너리를 사용하지 마세요. .
참고 : CSV는 끔찍한 파일 형식입니다 . 간단하지만 잘못 정의되어 있으며 상태 저장 파서가 필요합니다. CSV를 사용하지 마십시오. 필요한 경우 TSV를 사용하십시오. 더 간단하지만 더 잘 정의되고 파싱하기가 쉽습니다.
https://chriswarrick.com/blog/2017/04/07/csv-is-not-a-standard/
https://www.cloudbakers.com/blog/everything-you-didnt-want-to-have-to-know-about-csv
크기가 걱정된다면 압축 .
(압축 된 바이너리 표현과 압축 된 바이너리 표현의 상대적인 크기 효율성에 대한 연구를 찾고 있습니다. VRML에 대한이 연구를 제외하고는 여전히 “좋은 정보를 찾지 못했지만”base64 인코딩 바이너리와 바이너리의 비교 “인지 확실하지 않습니다. https://www.cs.unc.edu/~isenburg/papers/is-bcraf-03.pdf .)