保存 .mat 文件,使用 -v7.3 开关?
Posted
技术标签:
【中文标题】保存 .mat 文件,使用 -v7.3 开关?【英文标题】:Save .mat file, use -v7.3 switch? 【发布时间】:2015-01-30 03:48:59 【问题描述】:我正在运行一个 m 文件,创建两个变量 Clus
和 Watts_Map
。我想将这两个变量保存到以“.mat”结尾的文件中。两者都是变量,尺寸为 (1152,241,319),其中 1152 为 360 度经度,增量为 0.3125 度,241 为纬度从 30S-30N,增量为 0.25 度,超过 319 个时间步长。代码一直工作到最后,我得到错误:
[Warning: Variable 'Clus' cannot be saved to a MAT-file whose version is older
than 7.3.
To save this variable, use the -v7.3 switch.
Skipping...]
[Warning: Variable 'Watts_Map' cannot be saved to a MAT-file whose version is
older than 7.3.
To save this variable, use the -v7.3 switch.
Skipping...]
我使用的是 Matlab 版本 R2014a,所以会认为这是最新版本。此外,我在更小的空间域(但超过 2920 个时间步)上运行了相同的精确代码,没有出现错误。
% Clear all variables, initialize counter, indexed by timestep
clc;
clear all;
rain = NaN(1152,241,319);
Clus = NaN(1152,241,319);
Areas_Final = NaN(500,319);
Wattage_Final = NaN(500,319);
Cluster_size = zeros(319,1);
Watts_Map = zeros(1152,241,319);
for year = 2000%:2008;
Nyear = sprintf('%04d',year);
% Call on the files for each year
filename = (['pr_3hr_GFDL-HIRAM-C360_amip_r1i1p1_' num2str(Nyear) '010100-' num2str(Nyear) '123123_subset_TROPICS.nc']);
disp(filename)
disp(year)
rain_rate = ncread(filename,'pr');
% Call on each timestep
for i = 960:4:2236; % Approx May 1st-Sep 30th
% Set extract subset for region, mask land areas, for each
% timestep
disp(i)
rain = rain_rate(:,:,i);
% Eliminate bad/no data points
index_rain = (rain >= (5.4e-05)) & (rain < 1e-2); % 0.2mm/hr is min rain rate
% Cluster each morning and afternoon matrix
Clus(:,:,i) = cluster_it(index_rain);
% Calculate cluster areas
Areas = cluster_areas_TROPICS(Clus(:,:,i));
Areas_Final(1:length(Areas),i) = Areas;
% Calculate cluster wattages
Wattage = cluster_wattage(Clus(:,:,i),rain);
Cluster_size(i,1) = max(max(Clus(:,:,i)));
% Create dummy matricies to populate and use to create the wattage
% maps
D = zeros(1152,241);
E = squeeze(Clus(:,:,i));
for index = 1:Cluster_size(i);
D(E == index) = Wattage(index);
end
Watts_Map(:,:,i) = D;
% Clear the dummy matricies
clear D E
end
% Save the output as a .mat file
file_out = sprintf(num2str(Nyear), year);
matfile = [file_out '_TROPICS_Watts_Maps_inc_Land_low_rain_threshold.mat'];
save(matfile, 'Clus', 'Watts_Map');
% Clear unneeded variables to save memory and prevent overwriting
clear index_rain rain Areas Wattage Clus file_out filename Areas_Final rain_rate Watts_Map Cluster_size year matfile
end
【问题讨论】:
【参考方案1】:即使在当前版本中,默认格式也不是 v7.3。您必须指定它:
save(matfile, '-v7.3', 'var1', 'var2');
您也可以在“General Preferences”中设置默认值:
注意v7.3 does compress data as of R2008a:
-v7.3 MAT 文件的压缩 您可以使用 save 函数的 -v7.3 选项将大小超过 2 GB 的数据项存储在 MAT 文件中。此选项是在 MATLAB R2006b 中引入的。使用 MATLAB R2008a,现在 save 会压缩这些 MAT 文件。
我已经看到 v7.3 文件的文件大小激增,但这是历史,现在可能更好。
【讨论】:
v7.3 只是稍微修改的 HDF5 格式 - HDF5 可以使用压缩,快速测试表明 MATLAB 确实压缩了数据。对我来说,保存在 v6、v7 和 v7.3 中的相同数据分别生成大小为 14MB、989KB 和 943KB 的文件。这表明 v7.3 不仅可以压缩数据,而且有时实际上可以击败 v7 压缩。至于为什么 MATLAB 默认不使用 v7.3,这可能与复杂嵌套结构/单元数组的文件大小有点混乱有关。 @MrAzzaman 很高兴知道它确实会压缩。它不习惯,这个事实是一个很大的缺点。根据release notes,看起来它是 R2008a。以上是关于保存 .mat 文件,使用 -v7.3 开关?的主要内容,如果未能解决你的问题,请参考以下文章