Как удалить переменную из.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).

Другие вопросы по тегам