Наращивание массивов с использованием 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');

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

См. также

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте