txt leer fprintf archivos matlab interop

fprintf - leer archivos txt en matlab



¿Cómo puedo guardar una matriz escasa de MATLAB muy grande en un archivo de texto? (7)

¿Has intentado particionarlo?

Quiero decir, intente llamar a full () en las 1000 primeras filas (o 5000) y luego repita el proceso si funciona.

Tengo una matriz dispersa 30000x14000 en MATLAB (versión 7), que necesito usar en otro programa. La función de guardar llamada no escribirá esto como ASCII (no compatible). La llamada full() en este monstruo da como resultado un error Out of Memory .
¿Cómo lo exporto?


Guarde la matriz dispersa como un archivo .mat . Luego, en el otro programa, use una biblioteca adecuada para leer el archivo .mat .

Por ejemplo, si el otro programa está escrito en Python, puede usar la función scipy.io.mio.loadmat , que admite matrices dispersas y le proporciona una matriz numpy dispersa.


Lo guardé como texto usando Java dentro de MATLAB. Código MATLAB:

pw=java.io.PrintWriter(java.io.FileWriter(''c://retail.txt'')); line=num2str(0:size(data,2)-1); pw.println(line); for index=1:length(data) disp(index); line=num2str(full(data(index,:))); pw.println(line); end pw.flush(); pw.close();

Aquí los data son una matriz dispersa extremadamente grande.


Puede usar find para obtener vectores de índice y valor:

[i,j,val] = find(data) data_dump = [i,j,val]

Puede volver a crear datos desde data_dump con spconvert, que está destinado a "Importar desde un formato externo de matriz dispersa" (así que supongo que es un buen formato de exportación):

data = spconvert( data_dump )

Puede guardar en ascii con:

save -ascii data.txt data_dump

Pero esto arroja índices como dobles, puede escribirlos mejor con fopen / fprintf / fclose:

fid = fopen(''data.txt'',''w'') fprintf( fid,''%d %d %f/n'', transpose(data_dump) ) fclose(fid)

Espero que esto ayude.


Si esto es más o menos una operación de una sola vez, simplemente iteraría a través de la matriz y escribiría la matriz en un archivo ASCII por fuerza bruta, o bien usaría la sugerencia de @ Veynom y llamaría a lleno () en un subconjunto de filas. Puede llevar un tiempo, pero probablemente se hará más rápido de lo que podría tomar para aprender a leer en un archivo .mat fuera del entorno de MATLAB.

Si esto es algo que tiene que hacer de manera recurrente, entonces tomaría el consejo de @ Vebjorn y usaría una biblioteca para leer el archivo .mat.


Use la función de find para obtener los índices de elementos distintos de cero ...

idcs = find(data); vals = data(idcs); ...save the index vector and value vector in whatever format you want...

Si lo desea, puede usar ind2sub para convertir los índices lineales en subíndices de fila y columna.

Si necesita recrear una matriz dispersa en matlab a partir de subíndices + valores, use spconvert .


dlmwrite - Matriz de escritura a archivo sintaxis ASCII Sintaxis

dlmwrite (nombre de archivo, M)

dlmwrite (nombre de archivo, M, ''D'')

dlmwrite (nombre de archivo, M, ''D'', R, C)

dlmwrite (nombre de archivo, M, ''attrib1'', valor1, ''attrib2'', valor2, ...)

dlmwrite (nombre de archivo, M, ''-append'')

dlmwrite (nombre de archivo, M, ''-append'', lista de valores-atributos)