Ho i file (> 100) che ogni contengono insiemi di dati registrati come questo:MATLAB: come creare più file di memoria mappati con un semplice "iteratore"?
- file0: [no. di set di dati nel file, n. dei punti dati per la registrazione1, i dati relativi alla registrazione 1, n. di punti dati per la registrazione2, dati relativi alla registrazione2, ..., n. di punti dati per la registrazioneM, dati relativi alla registrazioneM]
- file1: [no. di set di dati nel file, ...] (come sopra)
Tutti i dati insieme possono superare i 20 GB, quindi il caricamento di tutti i dati in memoria non è un'opzione. Quindi, vorrei creare file mappati in memoria per ciascuno dei file, ma nascondendo all'utente la complessità dei dati sottostanti, ad esempio, vorrei poter operare sui dati come questo:
for i=1:TotalNumberOfRecordings
recording(i) = recording(i) * 10; % some stupid data operation
% or even more advanced better:
recording(i).relatedData = 2000;
end
Quindi, non importa se recording(i)
è in file0, file1, o qualche altro file, e indipendentemente dalla sua posizione all'interno del file, ho una lista che mi permette di accedere ai dati relativi tramite una mappa di memoria.
Quello che ho finora, è una lista di tutti i file all'interno di una directory, la mia idea ora era quella di creare semplicemente una lista come questa:
entry1: [memoryMappedFileHandle, dataRangeOfRecording]
entry2: [memoryMappedFileHandle, dataRangeOfRecording]
E poi utilizzare questo elenco per altri file astratte e registrazioni. Ho iniziato con questo codice:
fileList = getAllFiles(directoryName);
list = []; n = 0;
for file = 1:length(fileList);
m = memmapfile(fileList(file));
for numberOfTracesInFile
n = n+1;
list = [list; [n, m]];
end
end
Ma io capisco l'errore:
Memmapfile objects cannot be concatenated
Sono abbastanza nuovo a MATLAB quindi questo è probabilmente una cattiva idea, dopo tutto. Come si fa meglio? È possibile creare una tabella memorymapped che contiene più file?
Se ho capito bene il problema, quello che ti serve è anche una mappa globale del 'tutti i vostri files' (non solo un oggetto memmapfile per ogni file). Penso che una piccola classe che contiene questa mappa globale e restituisca l'insieme di dati richiesti sarebbe la strada da percorrere. Quando vuoi accedere a 'recording (i)', vorrebbe puntare a un singolo punto o ad un array? – Hoki
Questo si riduce alla possibilità di concatenare gli oggetti 'memmapfile'? Hai provato gli array 'cell'? – horchler