如何从 matlab 中的 .mat 文件中删除变量?

How to delete a variable from .mat file in matlab?

我的 .mat 文件中有三个矩阵,我需要删除其中一个。

我试了clear ('Matrice1'),但是没用。

我能想到的最接近删除变量的方法是用空数组替换它。如果这是可以接受的,您可以使用 question Sardar_Usama mentioned, or using 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] 

完成此操作后,无需执行其他操作。文件中的变量将具有新值(在本例中为 [])。


P.S.

我提供这个答案是因为链接的问题来自大约 6 年前,当时 matfile 选项还不存在(在 R2011b 中添加) .

如果您绝对必须完全删除整个变量,最直接的选择是加载数据,删除变量,然后重新保存。因为我们必须再次加载和保存,所以这种方法的效率很可能远低于使用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