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

时间:2016-08-25 15:50:35

标签: matlab file-io data-storage file-access mat-file

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

我尝试clear ('Matrice1'),但它不起作用。

2 个答案:

答案 0 :(得分:1)

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

执行此操作后,无需进一步操作。文件中的变量将具有新值(在这种情况下为[])。

P.S。

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

答案 1 :(得分:1)

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