exponenta event banner

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

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

См. также

Связанные темы