Quel est le meilleur format de fichier pour stocker une matrice 2D non compressé?
-
16-10-2019 - |
Question
Pour ce que ça vaut mon cas particulier est une matrice symétrique, mais cette question doit répondre de façon plus générale.
La solution
Le format le plus compatible est sûrement CSV / TSV. Ce texte de et vous pouvez généralement gzip à la volée avec le logiciel que vous utilisez. Il n'y a pas de format largement normalisé pour stocker des données de réseau matriciel. Matlab a ses fichiers * .mat, NumPy a * .npz, Stata et SAS ont leur propre ... Best il suffit d'utiliser un fichier texte clair.
Si la matrice est symétrique, si elle est très grande ou s'il y aura beaucoup d'entre eux, vous pourriez épargner 50% dans l'encombrement en stockant seulement la partie triangulaire inférieure (ou supérieure) de celui-ci. Si vous avez choisi de le faire, il y a, encore une fois, le format ne largement acceptée. Il suffit de stocker la forme d'abord, puis la aplaties, les données 1D.
Autres conseils
J'aller avec .csv comme il est universellement accepté et peut être lu facilement dans différents langages de programmation. En outre, vous pouvez simplement l'ouvrir avec un logiciel de bureau. Si vous utilisez votre matrice seulement en Python Je recommande également bibliothèque Pickle qui écrit votre matrice dans un < em> .p et le format peut être lu facilement en Python avec une simple fonction de la charge.
retour / saut de ligne (CR / LF) pourrait causer des problèmes en fonction du système , je vous suggère de stocker la matrice « en ligne » ou dans raster style avec un en-tête courte pour spécifier votre convention, un certain nombre de versioning (vous pourriez changer d'avis plus tard, et d'augmenter la version), etc. et au moins la taille de la matrice, et le reste dans un format texte (CSV, TSV). Ceci est similaire à ce qui se fait sur la carte grise portable ou au format image bitmap.
que j'ai utilisé pour stocker du texte .
Un exemple minimum pourrait être:
2,3,0.1,1.2,2.3,3.4,4.5,5.6
pour 2 $ \ 3 fois matrice $:
\ Begin {array}
0,1 et 1,2 et 2,3 \\ 3.4 & 4.5 et 5.6
\ End {array}
mais vous pouvez utiliser par exemple #2,#3,0.1,1.2,2.3,3.4,4.5,5.6
de sorte que les étrangers (pensez à la ) comprendre que les deux premiers entiers sont « différents » et fournir des conseils sur la façon dont doivent être lus les numéros suivants. Avec une matrice carrée (typique des matrices symétriques), ce qui est encore plus intéressant, comme vous avez seulement besoin d'un numéro d'en-tête #n
(côté) et les lecteurs aigus verront que les chiffres restants sont n $ ^ 2 quantité $.
Vous pouvez également jeter un oeil à d'autres Matrice systèmes de stockage , et si votre matrice est clairsemée, compressé ligne de stockage (CRS) .