exponenta event banner

matfile

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

Описание

Объект MAT-файла используется для доступа и изменения переменных в MAT-файле без загрузки файла в память. Можно загрузить или сохранить части переменных. Частичная загрузка и сохранение переменных с использованием объекта MAT-файла требует меньше памяти, чем load и save команды.

Создание

Описание

пример

matObj = matfile(filename) создает matlab.io.MatFile объект, подключенный к MAT-файлу, указанному filename.

Объект MAT-файла позволяет обращаться к переменным и изменять их непосредственно в MAT-файле без необходимости загрузки переменных в память.

пример

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

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

развернуть все

Имя MAT-файла, заданного как вектор символов или строковый скаляр.

  • filename может включать в себя полный или частичный путь; В противном случае matfile выполняет поиск файла по пути поиска MATLAB ®.

  • Если filename не включает внутренний номер, matfile прилагает .mat.

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

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

  • true - Включить доступ на запись к MAT-файлу из объекта MAT-файла. Если файл доступен только для чтения, измените системные разрешения с помощью fileattrib функция.

  • false - Отключить доступ на запись к MAT-файлу из объекта MAT-файла.

Свойства

развернуть все

Доступ к свойствам объекта MAT-файла

Доступ к свойствам объекта MAT-файла с помощью синтаксиса ObjectName.Properties.PropertyName, где PropertyName - имя свойства. Например, можно получить доступ к пути исходного файла MAT, подключенного к объекту MAT-файла. mObj с использованием синтаксиса mObj.Properties.Source.

Путь к файлу, возвращаемый в виде вектора символов, содержащего полный путь к MAT-файлу.

Состояние доступа записи объекта MAT-файла, возвращаемое как true или false.

  • true - Объект MAT-файла имеет доступ на запись к MAT-файлу.

  • false - Объект MAT-файла имеет доступ только для чтения к MAT-файлу.

Функции объекта

size

Получение размеров массива переменной в MAT-файле

allDims = size(matObj,variable) возвращает размер каждого измерения указанной переменной в файле, соответствующем matObj. Продукция allDims является 1около-m вектор, где m = ndims(variable).

[dim1,...,dimN] = size(matObj,variable) возвращает размеры каждого измерения в отдельных выходных переменных dim1,...,dimN.

selectedDim = size(matObj,variable,dim) возвращает размер указанного измерения.

Примечание: Не звонить size с синтаксисом size(matObj.variable). Этот синтаксис загружает все содержимое переменной в память. Для очень больших переменных эта операция загрузки приводит к Out of Memory ошибки.

who

Получение списка переменных в MAT-файле

varlist = who(matObj) перечисляет в алфавитном порядке все переменные в MAT-файле, связанные с matObj. При необходимости возвращает список в массиве ячеек varlist.

varlist = who(matObj,variables) перечисляет указанные переменные.

whos

Получение списка переменных в MAT-файле с размерами и типами

details = whos(matObj) возвращает информацию обо всех переменных в MAT-файле, связанных с matObj.

details = whos(matObj,VarName1,...,VarNameN) возвращает информацию об указанных переменных.

Примеры

свернуть все

Создайте для файла объект MAT-файла. matfile функция конструирует matlab.io.MatFile объект, соответствующий MAT-файлу.

matObj = matfile('myFile.mat')

Разрешить доступ для записи в MAT-файл, myFile.mat, при создании объекта.

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

Кроме того, можно включить доступ на запись после создания объекта MAT-файла, задав Writable собственность.

m.Properties.Writable = true;

Откройте образец файла MAT topography.mat. Прочтите переменную topo из файла с помощью объекта MAT-fie. MATLAB ® загружает всю переменную ,topo, в рабочее пространство.

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

Copyright 2012 The MathWorks, Inc.

Создайте MAT-файл, содержащий массив, а затем добавьте в файл другой массив с помощью объекта MAT-файла.

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

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

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

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

Создайте еще один массив 15 на 15, y. Сохранить y в MAT-файл с использованием объекта MAT-файла. Укажите переменную в MAT-файле с помощью точечной нотации, аналогичной доступу к полям структурных массивов. MATLAB ® добавляет переменную с именемy в файл.

y = magic(15);
m.y = y;

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

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

  x         20x20             3200  double              
  y         15x15             1800  double              

Доступ к определенным частям переменной в MAT-файле с помощью объекта MAT-файла. Например, можно сохранить данные в подмножестве переменных в MAT-файле или прочитать подмножество переменных в рабочей области MATLAB ® .

Сохранение данных в подмножестве переменных y в файле myFile2.mat с использованием объекта MAT-файла. Сначала создайте объект MAT-файла m.

m = matfile('myFile2.mat');

Затем создайте и сохраните массив в части переменной y. Укажите переменную в MAT-файле с помощью точечной нотации, аналогичной доступу к полям структурных массивов. MATLAB ® вставляет массив 20 на 20 в элементы y указанные индексами (81:100,81:100).

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

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

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

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

Откройте пример 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-файлах путем индексирования:

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

    • Назначение комплексных значений индексированным частям реального массива не поддерживается.

  • Для разреженных массивов в MAT-файле объект MAT-файла:

    • Поддерживает чтение подмножества разреженного массива посредством индексирования.

    • Не поддерживает запись (назначение значений) в подмножество разреженного массива посредством индексирования.

  • Объект MAT-файла не поддерживает индексирование в:

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

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

    • Массивы строк

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

    • Определяемые пользователем классы

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

  • При сохранении объекта-дескриптора MATLAB сохраняет копию объекта, а не копию дескриптора. Поэтому изменение объекта с помощью его дескриптора в рабочей области, из которой был сохранен объект, не приводит к изменению сохраненного объекта-дескриптора.

Совет

  • Для эффективной частичной загрузки и сохранения требуются 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, определите степень переменной с помощью size способ:

    sizeMyVar = size(matObj,'myVar')
Представлен до R2006a