Рост Массивов Используя Функцию 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');

Размер файла теперь больше, потому что массив заполняется с данными.

Смотрите также

Похожие темы