matfile

Доступ и изменение переменной непосредственно в MAT-файлах, без загрузки в память

Синтаксис

m = matfile(filename)
m = matfile(filename,'Writable',isWritable)

Описание

пример

m = matfile(filename) создает объект MAT-файла, m, соединенный с MAT-файлом под названием filename. Объект позволяет вам получать доступ и заменять переменные непосредственно в MAT-файле, не имея необходимость загружать переменные в память.

Частичная загрузка и сохранение, которое обеспечивает функция matfile, требуют меньшей памяти, чем load и команды save, которые всегда работают с целыми переменными.

пример

m = matfile(filename,'Writable',isWritable) включает или отключает доступ для записи к файлу.

Примеры

свернуть все

Загрузите переменную topo из файла в качестве примера, topography.mat.

Откройте MAT-файл в качестве примера, topography.mat.

filename = 'topography.mat';
m = matfile(filename);

Считайте переменную topo из MAT-файла.

topo = m.topo;

MATLAB® загружает целую переменную, topo, в рабочую область.

Сгенерируйте 20 20 массив в качестве примера, x, и сохраните его в MAT-файл под названием myFile.mat.

x = magic(20);
save('myFile.mat','x');

Создайте объект MAT-файла, соединенный с существующим MAT-файлом под названием myFile.mat. Включите доступ для записи к MAT-файлу установкой Writable к true.

m = matfile('myFile.mat','Writable',true);

Сгенерируйте 15 15 массив в качестве примера, y.

y = magic(15);

Сохраните y в MAT-файл. Задайте переменную в MAT-файле с помощью записи через точку, подобной доступу к полям массивов структур.

m.y = y;

MATLAB® добавляет переменную под названием y к файлу.

Отобразите все переменные, сохраненные в MAT-файле, myFile.mat.

whos('-file','myFile.mat')
  Name       Size            Bytes  Class     Attributes

  x         20x20             3200  double              
  y         15x15             1800  double              

Доступ к определенным элементам переменной MAT-файла.

Откройте новый MAT-файл, myFile2.mat.

m = matfile('myFile2.mat');

Сохраните 20 20 массив в качестве примера к части переменной, y, в myFile2.mat. Задайте переменную в MAT-файле с помощью записи через точку, подобной доступу к полям массивов структур.

m.y(81:100,81:100) = magic(20);

MATLAB® вставляет 20 20 массив в элементы y, заданного индексами (81:100,81:100).

Считайте подмножество массива y в новую переменную рабочей области, z.

z = m.y(85:94,85:94);

MATLAB читает 10 10 подмассив, заданный индексами (85:94,85:94) из MAT-файла в переменную z рабочей области.

Определите размер переменной, и затем вычислите среднее значение каждого столбца.

Откройте MAT-файл в качестве примера, stocks.mat.

filename = 'stocks.mat';
m = matfile(filename);

Определите размер переменной, stocks, в stocks.mat.

[nrows,ncols] = size(m,'stocks');

Вычислите среднее значение каждого столбца переменной stocks.

avgs = zeros(1,ncols);
for i = 1:ncols
    avgs(i) = mean(m.stocks(:,i));
end

Включите доступ для записи к MAT-файлу, myFile.mat, установкой Writable к true, когда вы откроете MAT-файл.

filename = 'myFile.mat';
m = matfile(filename,'Writable',true);

Также установите Properties.Writable на отдельном шаге после того, как вы откроете MAT-файл.

m.Properties.Writable = true;

Входные параметры

свернуть все

Имя MAT-файла, заданного как вектор символов. Если файл не находится в текущей папке, filename должен включать полное или относительный путь. Если filename не включает расширение, то matfile добавляет .mat.

Если файл не существует, то matfile создает MAT-файл Версии 7.3 на первом присвоении на переменную.

matfile только поддерживает эффективную частичную загрузку и сохранение для MAT-файлов в формате Версии 7.3. Если вы индексируете в переменную в Версии 7 (текущее значение по умолчанию) или более ранний MAT-файл, MATLAB® предупреждает и временно загружает целое содержимое переменной.

Пример: 'myFile.mat'

Типы данных: char

Доступ для записи к MAT-файлу, заданному или как true или как false.

  • true позволяет сохранить в MAT-файл. Если файл только для чтения, MATLAB изменяет системные полномочия с функцией fileattrib.

  • false отключает сохранение в MAT-файл. MATLAB не изменяет системные полномочия.

Значением по умолчанию является true для новых файлов и false для существующих файлов.

Типы данных: логический

Выходные аргументы

свернуть все

Объект MAT-файла соединяется с MAT-файлом.

Переменные доступа в MAT-файле с записью через точку, подобной доступу к полям массивов структур:

  • Чтобы загрузить часть переменной varName из MAT-файла, соответствующего m, вызовите:

    loadedData = m.varName(indices);

  • Чтобы сохранить часть переменной varName к MAT-файлу, соответствующему m, вызовите:

    m.varName(indices) = dataToSave;

При доступе к переменным задайте индексы для всех размерностей. Индексы могут быть одним значением, равномерно распределенной областью значений увеличения значений или двоеточия (:); например:

m.varName(100:500,200:600)
m.varName(:,501:1000)
m.varName(1:2:1000,80)

Ограничения

  • matfile не поддерживает линейную индексацию. Необходимо задать индексы для всех размерностей.

  • matfile не поддерживает индексацию в:

    • Переменные таблиц

    • Ячейки массивов ячеек

    • Поля массивов структур

    • Пользовательские классы

    • Разреженные массивы

  • Вы не можете присвоить комплексные числа индексируемому фрагменту действительного массива.

  • Вы не можете оценить указатели на функцию с помощью m вывод. Например, если ваш MAT-файл содержит указатель на функцию myfunc, синтаксис m.myfunc() пытается индексировать в указатель на функцию и не вызывает функцию.

  • Эффективная частичная загрузка и сохранение требуют MAT-файлов Версии 7.3. Чтобы создать MAT-файл Версии 7.3, вызовите функцию save с опцией '-v7.3'. Например, чтобы преобразовать существующий MAT-файл под названием durer.mat к Версии 7.3, вызовите:

    load('durer.mat');
    save('mycopy_durer.mat','-v7.3');

Советы

  • Используя ключевое слово end, когда часть индекса заставляет MATLAB загружать целую переменную в память. Для очень больших переменных эта операция загрузки приводит к Out of ошибки Memory. Вместо того, чтобы использовать end, определите степень переменной, myVar, с методом size, таким как:

    sizeMyVar = size(m,'myVar')

Представленный в R2011b