Tengo un gran archivo MATLAB (150 MB) en forma de matriz (es decir, 4070 x 4070). Necesito trabajar en este archivo en MATLAB pero parece que no puedo cargar este archivo. Recibo un error de "falta de memoria". ¿Hay alguna otra forma en que pueda cargar este tamaño de archivo? Estoy usando un procesador de 32 bits y tengo 2 GB de RAM. Por favor, ayúdenme, me estoy cansando de lidiar con este problema.¿Cómo puedo cargar archivos grandes (~ 150MB) en MATLAB?
Respuesta
Si se trata de un archivo de imagen, y desea trabajar con él, intente con matlab block processing. Al usarlo, cargará pequeñas partes del archivo. Su función fun
se aplicará a cada bloque individualmente.
B = blockproc(src_filename,[M N],fun)
En caso de que sea un archivo xml
, probar el modo XML DOM Node
junto con SAX
- (Gracias a @Nzbuu por señalarlo), pero que parece ser una funcionalidad no documentada.
Además, si se trata de un archivo de texto de cualquier tipo (Improbable, debido a la cantidad de datos), intente herramienta externa para dividir.
XML DOM lee todo el archivo en la memoria primero, por lo que no lo ayudará aquí; SAX transmite el XML y genera eventos para procesar los datos. Además, he encontrado que el procesamiento de los objetos DOM en MATLAB es lento. – Nzbuu
@Nzbuu, gracias. Por alguna razón, pensé que Matlab siempre usa SAX. La búsqueda rápida en Google reveló que estás en lo correcto. –
Creo que usa SAX para crear un árbol DOM. – Nzbuu
Starting desde el release R2011b (ver.7.13) hay un nuevo objeto matlab.io.MatFile con MATFILE como constructor. Permite cargar y guardar partes de variables en archivos MAT. Ver la documentación para más detalles. Aquí está un ejemplo sencillo de leer parte de una matriz:
matObj = matfile(filename);
a = matObj.a(100:500, 200:600);
Si el archivo original no es un archivo MAT, pero algunos archivo de texto, se puede leer parcialmente y utilizar matfile
para salvar aquellas partes de la misma variable en un archivo MAT para un acceso posterior. Solo recuerda establecer la propiedad Writable
en true en el constructor.
Asumiendo que su archivo de texto es delimitado por tabuladores y contiene sólo números, aquí es un script de ejemplo para leer los datos por bloques y guardarlos en el archivo MAT:
blocksize = 100;
startrow = 0;
filename = 'test.mat';
matObj = matfile(filename,'Writable',true);
while true
try
a = dlmread(filename,'\t',startrow,0); %# depends on your file format
startrow = startrow + blocksize;
matObj.a(startrow+(1:blocksize),:) = a;
catch
break
end
end
no tengo la última versión ahora para probar, pero espero que funcione.
Puede también usuario de MATLAB de Memory-Mapping of Data Files para leer en un bloque del archivo, procesarla, y proceder al siguiente bloque sin tener que cargar el archivo en la memoria a la vez.
Por ejemplo, consulte this example, que "asigna un archivo de 100 números de punto flotante de precisión doble a la memoria".
He intentado este objeto en versiones anteriores cuando apareció en MATLAB. Curiosamente, MATLAB tuvo que cargar todo el archivo en la memoria de todos modos. Contacté con el soporte de Mathworks y lo confirmaron.Básicamente promovieron esta característica como la capacidad de compartir los datos entre diferentes aplicaciones al mismo tiempo. Bueno, parece que las cosas han cambiado. Lo intenté de nuevo con R2011a y el objeto 'memmapfile' ocupa solo 300b. Buena respuesta. +1. El archivo debe tener una estructura regular para este objeto (¿solo binario?), Por lo que es probable que el archivo de entrada deba formatearse de todos modos. – yuk
- 1. ¿Cómo puedo dividir archivos grandes?
- 2. Validación para archivos grandes al Cargar
- 3. ¿Cómo puedo manejar archivos grandes en Ruby?
- 4. Cómo cargar archivos grandes en Heroku (particularmente videos)
- 5. ¿Cómo manejar imágenes grandes en matlab sin quedarse sin memoria?
- 6. La conexión se restablece al cargar archivos (grandes)
- 7. Cargar ejemplos de archivos grandes con autocandidata Nancy
- 8. Cargar archivos grandes desde la aplicación ASP .NET
- 9. PHP - vacío $ _POST y $ _FILES - al cargar archivos más grandes
- 10. Subidas de archivos grandes
- 11. Oscilación Archivos grandes Rendimiento
- 12. ¿Cómo configuro IIS para manejar cargas de archivos realmente grandes?
- 13. CodeIgniter Cargando archivos grandes
- 14. Archivos .asv en matlab
- 15. Cómo base64 decodificar archivos grandes en PHP
- 16. Rechazar archivos grandes en git
- 17. WPF: ¿Cómo cargar muchas imágenes grandes rápidamente en wrappanel?
- 18. Problemas de carga de archivos PHP al cargar archivos "más grandes" (más de 2 MB)
- 19. lectura bastante grandes archivos JSON en Python
- 20. Cómo cargar archivos grandes al blob de Azure desde una página web
- 21. Resharper con archivos grandes o * muy * grandes
- 22. ¿Cómo puedo agregar nuevos códecs para matlab?
- 23. ¿Cómo escanear archivos realmente grandes en el disco?
- 24. Procesando archivos xml grandes
- 25. Soporte de archivos grandes en C++
- 26. java: ¿escribir archivos grandes?
- 27. ¿Cómo organizar grandes archivos de código?
- 28. Cómo transmitir archivos grandes usando JAXB Marshaller?
- 29. Cómo dividir archivos grandes de manera eficiente
- 30. Cómo precomprimir archivos html muy grandes
¿Es un formato de archivo * .mat o algún otro formato? – hatboyzero
¡Estoy muy sorprendido de que un archivo de 150 mb pueda llenar 2 GB de memoria cuando se abra! ¿Cuánta memoria libre tiene tu máquina antes de intentar la carga? ¿Hay algún otro programa que pueda cerrar? – japreiss
Si se trata de un archivo .mat, ¿'whos -file' también causa problemas, o simplemente 'load'? Si no es un archivo .mat, ¿hay texto de encabezado? –