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');
Размер файла теперь больше, потому что массив заполнен данными.