Potřebuji napsat některá data z výpočtu, která si později přečte Paraview (soubor .vtu nebo vtk).
Pokud jde o velikost souboru, měl bych použít formát ASCII nebo binární formát?
Odpověď
Pokud se staráte pouze o velikost souboru, potřebujete binární soubory. Pro ilustrativní příklad předpokládejme, že do souboru zapisujete 1 číslo s plovoucí desetinnou čárkou s dvojitou přesností. Předpokládejme, že souborový systém to zvládne perfektně a soubor, záhlaví a výplň jsou všechny 0.
U binárního souboru by toto číslo vyžadovalo přesnou velikost čísla v RAM, nebo 8 bajtů.
Ve formátu ASCII by obsahovalo:
- 16 číslic základního
- 1 období pro desetinnou čárku
- 1 znak pro vymezení exponenta
- 1 znak pro znaménko exponenta
- 2-3 znaky pro exponenta
Za předpokladu používá pouze 1 bajt pro znak, tj. 22 bajtů pro udržení stejného čísla. To nepočítá znaky potřebné k rozdělení mezi čísly (obvykle alespoň 1). Proto bude velikost souboru pro formát ASCII asi třikrát větší.
S přesností uložených souborů můžete obchodovat s velikostí souboru (v základně uchovávejte pouze 5-6 číslic), ale záleží na tom, co pro které je používáte. Hlavní výhodou ASCII je ladění nebo vytváření údajů čitelných pro člověka.
Komentáře
- Ve vědecké oblasti je také důležitá dlouhodobá archivace a spolehlivost sdílení, proto je přes ‚ s neefektivností ASCII CSV tak převládající a doporučeno (PDF) .
- Dalším užitečným bodem je, že ačkoli kódování ASCII CSV není ‚ t velmi efektivní, pomocí nástroje pro kompresi souborů (jako je zip, gzip atd.) ve vašem ascii Soubor obvykle zmenší velikost souboru na něco podobného velikosti binárního souboru.
- Buďte opatrní, protože některé vstupní / výstupní knihovny nejsou dostatečně divné ‚ získat bit za bitovou reprodukovatelnost při výstupu čísel IEEE Double Precision v ASCII a jejich následném načtení. Podle mých zkušeností je někdy kvůli bezpečnosti nutné použít 17 nebo 18 desetinných číslic.
- Co se týče horchler ‚ s komentář: Jsem si ‚ jistě, že dobře používané, standardizované otevřené binární formáty, jako je HDF5, budou ještě dlouho existovat. To ‚ je to, co osobně ‚ d doporučuji.
- + Kvůli přesnosti se vždy držím binárního kódu, kompaktnost, klid a (zejména) rychlost. Pak, pokud potřebuji další kompaktnost, můžu to zazipovat. Pokud potřebuji mít možnost vizuálně číst obsah, mohu k tomu napsat malý program. Na druhou stranu, pokud je ‚ důležitější být vizuální a snadno se předává náhodným programům, jako je Excel, R atd., Pak je CSV cesta.
Odpověď
V praxi zřídka potřebujete data ve vizualizačních souborech, která jsou přesnější než, řekněme, 3 platná v takovém případě je ASCII – možná překvapivě – často kompaktnější než binární forma. Pokud uvažujete o archivaci, pak bzipování těchto souborů ASCII pravděpodobně přinese nejmenší soubory, které můžete získat.
To znamená, že Paraview čte formát VTU, který má komprimovaný binární tvar (založený na XML, ale data jsou nejprve komprimována pomocí libz a poté znovu uuencoded, aby poskytla text ASCII). U typických souborů to ušetří faktor 4–10. U velkých souborů je to určitě způsob, jak jít.
Komentáře
- Hlasoval jsem pro rozdíl od ostatních odpovědí. Nemám ‚ silný názor, ať už je to jakkoli, ale ‚ je zde dobrý důvod.
- Alternativně můžete explicitně vynulovat nízké bity a komprimovat binární soubory.
- Páni, to by vyžadovalo trochu bitky. Nebo existují funkce, které to dělají? (Jiné než casting na float a zpět na double.)
Odpověď
tl; dr – ukládat soubory do utf8 . Pokud je to tabulkové, použijte hodnoty oddělené tabulátorem.
Zdá se mi, že správné možnosti jsou:
- utf8 text ( ne ASCII . Nejsme všichni mluvčí americké angličtiny)
- binární
ASAICT jedinou skutečnou výhodou binárních souborů je výkon. Je mnohem rychlejší načíst výpis paměti do paměti než generovat text na cestě ven nebo jej analyzovat na cestě dovnitř.
Nebo zde: https://auth0.com/blog/beating-json-performance-with-protobuf/ (Toto není vědecké a diskutuje se o celkovém výkonu, přičemž velkými rozdíly je množství přenášených dat a doba analýzy v případě, že je předpojatý na textová data. )
Šance, že formát binárního souboru bude správně podporovat text unicode, je nízká, takže pokud vám záleží na integritě dat, nepoužívejte binární . Slyšeli jste také o problémech s endianem? Různá binární reprezentace celých čísel a plováků s podpisem?
Textová reprezentace -100000 a -1e + 6 nemění hodnotu v závislosti na na vašem CPU (v každém případě v utf-8 a ASCII).
Šance, že program, který rozumí binárnímu souboru, mu bude stále rozumět nebo bude fungovat i po 50 letech, není znám, pravděpodobně není dobrý . Pokud vám záleží na dlouhověkosti, nepoužívejte binární .
Často je obtížné číst binární data z jiného programu, takže pokud vám záleží na interoperabilitě, nepoužívejte binární .
Kromě toho: CSV je hrozný formát souboru . Je to jednoduché, přesto špatně definované a vyžaduje stavový analyzátor. Nepoužívejte CSV. Pokud musíte, použijte TSV. Je to jednodušší, ale lépe definované a jeho analyzování je triviální.
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
Pokud se obáváte velikosti, komprimujte .
(Přišel jsem sem hledat studie relativní efektivity velikosti komprimované binární reprezentace vs. komprimované text. Kromě této studie o VRML jsem stále nenašel dobré informace, ale ani si nejsem jistý, jestli jde o srovnání binárního a binárního kódování base64. https://www.cs.unc.edu/~isenburg/papers/is-bcraf-03.pdf .)