leer - Lee y escribe desde/a un archivo binario en Matlab
lector de archivos matlab (3)
Como escribió Bill the Lizard , puedes usar fread para cargar los datos en un vector. Solo quiero ampliar un poco su respuesta.
Lectura de datos
>> fid=fopen(''data.bin'',''rb'') % opens the file for reading
>> A = fread(fid, count, ''int16'') % reads _count_ elements and stores them in A.
Los comandos fopen y fread default a la codificación Little-endian [1] para los enteros. Si su archivo está codificado Big-endian, deberá cambiar el fread a
>> A = fread(fid, count, ''int16'', ''ieee-be'');
Además, si desea leer todo el conjunto de archivos
>> count=inf;
y si quiere leer los datos en la matriz con n columnas, use
>> count=[n inf];
Escribir datos
En cuanto a escribir los datos en un archivo. El comando, fwrite , en la respuesta de Bill escribirá en un archivo binario. Si desea escribir los datos en un archivo de texto, puede usar dlmwrite
>> dlmwrite(''data.csv'',A,'','');
Referencias
[1] http://en.wikipedia.org/wiki/Endianness
Actualizar
El formato de la máquina (IE, ieee-be , ieee-le , vaxd , etc.) de los datos binarios se puede especificar en los comandos fopen o fread en Matlab. Los detalles del formato de máquina admitido se pueden encontrar en la documentación de fopen de Matlab.
El comentario de Scott French a la respuesta de Bill sugiere leer los datos en una variable int16. Para hacer esto uso
>> A = int16(fread(fid,count,precision,machineFormat));
donde el recuento es el tamaño / forma de los datos que se leerán, la precisión es el formato de los datos, y el formato de la máquina es la codificación de cada byte.
Ver comandos fseek para moverse por el archivo. Por ejemplo,
>> fseek(fid,0,''bof'');
rebobinará el archivo al principio donde bof representa el comienzo del archivo .
Mi conocimiento de matlab es simplemente una necesidad de saber, así que esta es probablemente una pregunta elemental. Sin embargo aquí viene:
Tengo un archivo que contiene datos (enteros de 16 bits) almacenados en formato binario. ¿Cómo lo leo en un vector / matriz en matlab? ¿Cómo escribo esta información en un archivo en matlab? ¿Hay alguna modificación inteligente para aumentar la velocidad de rendimiento al leer / escribir una gran cantidad de datos (gigabytes)?
Por lo general, odio ver enlaces en una respuesta, pero esto se ve bastante cerca:
http://www.mathworks.com/support/tech-notes/1400/1403.html
En cuanto a la segunda parte del ajuste del rendimiento, han pasado 6 años desde que utilicé Matlab, así que no sé.
HTH
Suponiendo que sepa cuántos valores ha almacenado en el archivo, puede hacer algo como esto para leer los datos en una matriz.
fid = fopen(''data.bin'',''rb'')
A = fread(fid, count, ''int16'')
Para escribir datos en un archivo, haga esto:
fid = fopen(''data.bin'',''w'')
count = fwrite(fid, A, ''int16'')
La función fwrite devuelve la cantidad de elementos (no bytes) escritos en el archivo.
En lo que respecta al ajuste del rendimiento, puede leer los datos en fragmentos para usar solo todo lo que necesite procesar. Esto es lo mismo en cualquier idioma, y no hay forma de acelerarlo que sea específico de Matlab.