Рост Массивов Используя Функцию 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
составляет меньше чем 5 000 байтов. Присвоение начального значения к последнему элементу массива не создает большой файл. Это действительно, однако, готовит вашу систему к потенциально большого размера увеличению 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');
Размер файла теперь больше, потому что массив заполняется с данными.