¿Cuál es el mejor formato de archivo para almacenar una matriz 2D sin comprimir?

datascience.stackexchange https://datascience.stackexchange.com/questions/9877

  •  16-10-2019
  •  | 
  •  

Pregunta

Por lo que vale la pena, mi caso particular es una matriz simétrica, pero esta pregunta debe responderse en general.

¿Fue útil?

Solución

El formato más compatible es seguramente CSV/TSV. Es un texto y generalmente puede verlo en la marcha con el paquete de software que está utilizando. No existe un formato ampliamente estandarizado para almacenar datos de matriz de matriz. Matlab tiene sus archivos *.mat, Numpy tiene *.npz, Stata y SAS tienen los suyos, ... es mejor usar un archivo de texto claro.

Si la matriz es simétrica, si es muy grande o si habrá muchas de ellas, podría ahorrar 50% en el requisito de espacio almacenando solo la parte triangular inferior (o superior). Si elige hacerlo, nuevamente no hay un formato ampliamente aceptado. Simplemente almacene la forma primero y luego los datos aplanados y 1D.

Otros consejos

Yo iría con .csv Como es universalmente aceptado y se puede leer en diferentes lenguajes de programación fácilmente. Además, simplemente puede abrirlo con un software de oficina. Si está utilizando su matriz solo en Python, también lo recomiendo Biblioteca que escribe tu matriz en un .pags formato y se puede leer fácilmente en Python con una función de carga simple.

Como Retorno del carro/alimentación de línea (CR/LF) Puede causar problemas dependiendo del sistema, sugiero que almacene la matriz "en línea" o en estilo ráster Con un encabezado corto para especificar su convención, un número de versiones (puede cambiar de opinión más tarde y aumentar la versión), etc. y al menos El tamaño de la matriz y el resto en algún formato de texto (CSV, TSV). Esto es similar a lo que se hace en el mapa gris portátil o formato de imagen de mapa de bits.

Usé eso para almacenar texto coeficientes bancarios de filtro.

Un ejemplo mínimo podría ser:2,3,0.1,1.2,2.3,3.4,4.5,5.6 para $ 2 Times 3 $ matrix: begin {array} 0.1 y 1.2 y 2.3 3.4 y 4.5 y 5.6 end {array} pero puede usar por ejemplo #2,#3,0.1,1.2,2.3,3.4,4.5,5.6para que los extraterrestres (piensen en el placa pionera dorada) Comprenda que los dos primeros enteros son "diferentes" y proporcionan pistas sobre cómo se deben leer los siguientes números. Con una matriz cuadrada (típica de matrices simétricas), esto es aún más interesante, ya que solo necesita un número de encabezado #n (el lado) Y los lectores agudos verán que los números restantes están en una cantidad de $ N^2 $.

También puedes echar un vistazo a otros Esquemas de almacenamiento de matriz, y si tu matriz es escasa, Almacenamiento de hileras comprimidas (CRS).

Licenciado bajo: CC-BY-SA con atribución
scroll top