如何从 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
我的 .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