我的文件中有.mat三个矩阵,我需要删除其中一个。
我尝试clear ('Matrice1')
,但它不起作用。
答案 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]
执行此操作后,无需进一步操作。文件中的变量将具有新值(在这种情况下为[]
)。
我提供这个答案,因为链接的问题是大约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