Matlab 无法处理数据



我一直在处理855个4000x4000矩阵的2个列表。这里是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'变量?

    for I = 1:size(par,1)

    for z = 1:size(par,2)

  2. 对于这个问题,除非我遗漏了这组函数的特定内容,否则您应该能够完全跳过' I '和'z'的循环并对计算进行矢量化:

    par (isnan (par_lon)) =南;

    par(isnan(par_late)) = nan;

这肯定会显著降低你的代码速度。除此之外很难说,但我可以肯定地看到,数百万次无关的文件读取可能会导致一些问题(临时文件地址等)或内存泄漏。

最新更新