matfile ФункцияПри записи большого количества больших значений в MAT-файл размер файла увеличивается неинтенсивным образом. Этот способ увеличения ожидается. Чтобы минимизировать время роста файла и обеспечить оптимальную производительность, назначьте начальные значения массиву перед заполнением его данными.
Например, предположим, что у вас есть записываемый MatFile объект.
fileName = 'matFileOfDoubles.mat';
matObj = matfile(fileName);
matObj.Properties.Writable = true;
Определите параметры значений для записи. При этом пишите один миллион значений, пятьдесят тысяч за раз. Значения должны иметь среднее значение 123,4 и стандартное отклонение 56,7.
size = 1000000; chunk = 50000; mean = 123.4; std = 56.7;
Перед заполнением последнего элемента массива данными присвойте ему начальное значение, равное нулю.
matObj.data(1,size) = 0;
Просмотр размера файла.
В системах с ОС Windows ® используйтеdir.
system('dir matFileOfDoubles.mat');В системах UNIX ® используйтеls -ls:
system('ls -ls matFileOfDoubles.mat');В этом случае matFileOfDoubles.mat меньше 5000 байт. Назначение начального значения последнему элементу массива не создает большого файла. Однако он готовит вашу систему к потенциально большому увеличению размера matFileOfDoubles.mat.
Запись данных в массив по одному фрагменту за раз.
nout = 0; while(nout < size) fprintf('Writing %d of %d\n',nout,size); chunkSize = min(chunk,size-nout); data = mean + std * randn(1,chunkSize); matObj.data(1,(nout+1):(nout+chunkSize)) = data; nout = nout + chunkSize; end
Просмотр размера файла.
system('dir matFileOfDoubles.mat');Теперь размер файла больше, так как массив заполнен данными.