Как удалить переменную из.mat файла в Matlab?
У меня в файле.mat три матрицы, мне нужно удалить одну из них.
я попробую clear ('Matrice1')
, но это не работает.
2 ответа
Если вам абсолютно необходимо полностью удалить всю переменную, самый простой вариант - загрузить данные, удалить переменную и затем сохранить ее. Поскольку мы должны снова загрузить и сохранить, этот метод, скорее всего, гораздо менее эффективен, чем использование memmapfile
или используя save
изменить хранимую переменную на пустой массив.
Например:
function testcode
% Generate sample data
a = rand(12);
b = rand(12);
c = rand(12);
save('test.mat');
% Remove and test
rmmatvar('test.mat', 'c');
whos('-file', 'test.mat');
end
function rmmatvar(matfile, varname)
% Load in data as a structure, where every field corresponds to a variable
% Then remove the field corresponding to the variable
tmp = rmfield(load(matfile), varname);
% Resave, '-struct' flag tells MATLAB to store the fields as distinct variables
save(matfile, '-struct', 'tmp');
end
Что дает следующий вывод:
Name Size Bytes Class Attributes
a 12x12 1152 double
b 12x12 1152 double
Самая близкая вещь к удалению переменной, о которой я могу думать, является заменой ее пустым массивом. Если это приемлемо, вы можете сделать это с помощью методов из упомянутого вопроса Sardar Usama или использовать matfile
вот так:
% Let's say the mat-file is called "matlab.mat"
a = matfile('H:\PathToFile\matlab.mat','Writable',true)
Выход:
a =
matlab.io.MatFile
Properties:
Properties.Source: 'H:\PathToFile\matlab.mat'
Properties.Writable: true
SIZE_X: [1x1 double]
SIZE_Y: [1x1 double]
Тогда вы можете сделать:
a.SIZE_X = []
И получить:
a =
matlab.io.MatFile
Properties:
Properties.Source: 'H:\PathToFile\matlab.mat'
Properties.Writable: true
SIZE_X: [0x0 double]
SIZE_Y: [1x1 double]
После этого никаких дальнейших действий не требуется. Переменная внутри файла будет иметь новое значение ([]
в этом случае).
PS
Я даю этот ответ, потому что связанный вопрос возник примерно 6 лет назад, когда matfile
Опция еще не существует (добавлено в R2011b).