2014-12-02 1 views
4

Я запускаю m-файл, создавая две переменные, Clus и Watts_Map. Я хочу сохранить обе переменные в файл, который заканчивается на «.mat». Обе переменные имеют размеры (1152,241,319), а 1152 - 360 градусов долготы с шагом 0,3125 град, 241 - как широта от 30S-30N с шагом 0,25 град, более 319 временных шагов. Код работает весь путь до конца, где я получаю ошибку:Сохраните файл .mat, используйте переключатель -v7.3?

[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 

ответ

8

Даже в текущей версии формат по умолчанию не является v7.3. Вы должны указать его:

save(matfile, '-v7.3', 'var1', 'var2'); 

Вы также можете установить значение по умолчанию в "Общие настройки":

enter image description here

Обратите внимание, что v7.3 does compress data as of R2008a:

Compression of -v7.3 MAT-Files

You can store data items that are over 2 gigabytes in size in a MAT-file using the -v7.3 option for the save function. This option was introduced in MATLAB R2006b. With MATLAB R2008a, save now compresses these MAT-files.

Я видел размер файла взорвать файлы v7.3, но это история, и, возможно, сейчас это лучше.

+1

v7.3 - это лишь слегка измененный формат HDF5 - для HDF5 можно использовать сжатие, а быстрый тест предполагает, что MATLAB действительно сжимает данные. Для меня те же данные, сохраненные в версиях v6, v7 и v7.3, создают файлы размером 14 МБ, 989 КБ и 943 КБ соответственно. Это говорит о том, что не только v7.3 сжимает данные, но и может на самом деле превзойти сжатие v7. Что касается того, почему MATLAB по умолчанию не использует v7.3, это может быть связано с тенденцией к тому, что размер файла будет немного зависеть для сложных вложенных структур/массивов ячеек. – MrAzzaman

+0

@MrAzzaman Приятно знать, что он сжимает. Он не привык, и этот факт был большой стороной. Похоже, это был R2008a в соответствии с [примечаниями к выпуску] (http://www.mathworks.com/help/matlab/release-notes-older.html#br0xe_f). – chappjc