MATLAB 从 netcdf 文件的子集读取

MATLAB read from subset of netcdf files

我有每小时风速 (684 (west-to-east) x 447 (south-to-north) 个数据点 x 72(小时)的大型 netcdf 文件。因此,单个文件的数组为 684x447x72我每年阅读 122 个。我将 72 小时和每年的文件数量连接起来。所以,最后我每年都有一个 684x447x(72x122) 数组。我需要准确读取文件中一半的数据点( western plot)并绘制数据,然后读取另一半数据点(东部图)并绘制数据。我不明白如何管理读取这些数据点。

这是我在读取循环中尝试过的:"var80speed" 是 684x447x72。 "nametest" 是我的 .nc 路径和文件。 [1 1 1] 是起始位置的矢量? .nc 文件的起始读取位置是左下角还是右上角?如果 684 是 west-to-east,正如它在每个文件的 .nc header 信息中所述,那么我似乎应该读取第一个数据点的一半和所有 north-to-south 点绘制然后将开始更改为 684/2,结束更改为 684 以进行第二个绘制?非常感谢这里的任何帮助!

var80speed = single(cat(3,var80speed, ncread(nametest,myVarName,[1 1 1], [ 684/2 447 72 ])));

%在代码中循环以读取 .nc 文件:

for kk = 1:numyrs
    for ii = 1:(numrowsfilestoread(1,kk))
        infiletest = strcat(files2test(filestoread(ii,kk),:),'.nc');
        nametest = fullfile(pathname,infiletest);
        disp(infiletest);
        ncidt = netcdf.open(nametest);
        var80speed = single(cat(3,var80speed, ncread(nametest,myVarName,[1 1 1], [684/2 447 72])));
        %obtain mean of filelength period considered
        netcdf.close(ncidt);
        fname = strcat(num2str(years(kk)),'_80wspeed_spd');
        path = 'J:\MATLAB\READ_netcdf_TTnc files\outfiles_text\';
        pathfile = strcat(path,fname);
        if ii == 61 % save middle of year
            savefast(pathfile,'var80speed');
            var80speed = []; 
        end
    end
    load(pathfile,'var80speed');
    var80speed2 = var80speed;
    var80speedall = cat(3,var80speed,var80speed2);
    clear var80speed;
    clear var80speed2;
    var80speed = []; var80speed2 = [];
    savefast(pathfile,'var80speedall');
 end

在提供更多信息之前,我将部分回答您的一些问题。我将使用 Matlab multidimention syntax.:

专注于这部分
ncread(nametest,myVarName,[1 1 1], [ 684/2 447 72 ])

这将从索引 (1,1,1) 开始,读取 342 行、447 列、72 页(小时)。如果您对维度的假设是正确的,那么这应该读取文件中所有时间的 "western" 数据。

要获得 "Eastern",您可以这样做:

ncread(nametest,myVarName,[684/2+1 1 1], [ 684/2 447 72 ])

这将从第 343 行(东开始)、第 1 列、第 1 页(小时)开始,并读取与之前相同的行数、列数和页数。

注意:从 ncread docs 开始,最后一个参数是 count

Vector of length N specifying the number of elements to read along the corresponding dimensions. If a particular element of count is Inf, ncread reads data until the end of the corresponding dimension.

因此,这在西方和东方调用 ncread 之间不会改变,因为您每次读取的数据量相同。但是,您可以使用 Inf 代替数字。