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-by- 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-файла для вашего файла. The 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;

Копирайт 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