2014-12-02 2 views
4

저는 m- 파일을 실행하여 과 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'); 

또한 "일반 환경 설정"에서 기본을 설정할 수 있습니다

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.

내가 파일 크기 본 적이 :

enter image description here

v7.3 does compress data as of R2008a 것을 v7.3 파일을 위해 날아간다. 그러나 그것은 역사 다. 그리고 아마 지금 더 좋다.

+1

v7.3은 약간 수정 된 HDF5 형식입니다. HDF5에서 압축을 사용할 수 있으며 빠른 테스트를 통해 MATLAB이 실제로 데이터를 압축한다는 것을 알 수 있습니다. 나를 위해 v6, v7 및 v7.3에 저장된 동일한 데이터는 각각 14MB, 989KB 및 943KB 크기의 파일을 생성합니다. 이것은 v7.3이 데이터를 압축 할뿐만 아니라 실제로 v7 압축을 이길 수 있음을 시사합니다. MATLAB이 기본적으로 v7.3을 사용하지 않는 이유는 파일 크기가 복잡한 중첩 구조/셀 배열에 약간의 변화가있는 경향 때문일 수 있습니다. – MrAzzaman

+0

@MrAzzaman 압축하는 것이 좋습니다. 그것은 익숙하지 않았고 그 사실은 큰면이있었습니다. [릴리스 정보] (http://www.mathworks.com/help/matlab/release-notes-older.html#br0xe_f)에 따르면 R2008a 인 것처럼 보입니다. – chappjc

관련 문제