簡體   English   中英

Matlab無法處理數據

[英]Matlab can't handle data

我一直在處理 2 個 855 4000x4000 矩陣列表。 這是一些值的 855 個矩陣的列表,另一個是坐標列表(另一個 855 4000x4000 矩陣)。 在一個周期內完成它很重要,以免有成千上萬個無用的變量。 對於每個文件,它都會剪切(讀取將 NaN 放在我不需要數據的地方)坐標數據,然后剪切與坐標相關的數據。 然后它將所有值收集到一個矩陣中。 代碼是:

for x = 1:length(list_with_par)
    cd 'D:\Coord'
    par_lon = ncread(list_with_coordinates(x,:), 'longitude');
    par_lon(par_lon>=15) = nan;
    par_lon(par_lon<=-18) = nan;
    
    par_lat = ncread(list_with_coordinates(x,:), 'latitude');
    par_lat(par_lon>=84) = nan;
    par_lat(par_lon<=76) = nan;
    
    cd 'D:\Par'
    par = ncread(list_with_par(x,:), 'PAR');
    
    for i = 1:size(ncread(list_with_par(x,:),'PAR'),1) %size(,1)
        for z = 1:size(ncread(list_with_par(x,:),'PAR'),2) %size(,2)
            if isnan(par_lon(i,z))
                par(i,z) = nan;
            end
            if isnan(par_lat(i,z))
                par(i,z) = nan;
            end
        end
    end
    if size(par,2) < size(PAR_main,2)
        left_cells = size(PAR_main,2) - size(par,2);
        temp_cell = NaN(4865,left_cells);
        C2 = cat(2,par,temp_cell);
    end
    if size(par,2) == size(PAR_main,2)
        C2 = par(:,:,1);
    end
    PAR_main(:,:,x) = C2(:,:,1);
end

但是在處理4-5小時后突然出現錯誤。

Error using netcdflib
The NetCDF library encountered an error during execution of 'open' function - 'HDF error (NC_EHDFERR)'.

Error in netcdf.open (line 67)
        [varargout{:}] = netcdflib ( 'open', filename, varargin{1} );

Error in internal.matlab.imagesci.nc/openToRead (line 1278)
            this.ncRootid = netcdf.open(this.Filename,'NOWRITE');

Error in internal.matlab.imagesci.nc (line 121)
                    this.openToRead();

Error in ncread (line 61)
ncObj   = internal.matlab.imagesci.nc(ncFile);

可能是什么問題?

我對 ncread(和相關函數)不是很熟悉,但有兩件事讓我印象深刻,它們似乎效率很低:

  1. 在“i”和“z”的循環中,是否有理由再次讀入數據以確定其大小,而不是僅僅使用您已經保存的“par”變量?

    對於 i = 1:size(par,1)

    對於 z = 1:size(par,2)

  2. 就此而言,除非我遺漏了這組函數的特定內容,否則您應該能夠完全跳過 'i' 和 'z' 的循環並向量化計算:

    標准桿(isnan(par_lon))=南;

    par(isnan(par_lat)) = nan;

這肯定會顯着降低您的代碼速度。 很難說除此之外,但我可以肯定地看到有數百萬次無關的文件讀取會如何導致臨時文件地址等問題)或 memory 泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM