我有每小时风速的大型netcdf文件(684(西向东)乘447(南到北)数据点72(小时)。因此,单个文件的阵列为684x447x72我和#39;每年读取122个。我连接每年72小时和#个文件。所以,最后我每年有一个684x447x(72x122)数组。我需要读取文件中正好一半的数据点(西方情节)并绘制数据,然后读取另一半数据点(东部情节)并绘制数据。我不了解如何管理读取这些数据点。
以下是我在阅读循环中尝试过的内容:" var80speed"是684x447x72。 " nametest"是我的.nc路径和文件。 [1 1 1]是起始位置的向量?在.nc文件的起始读取位置左下角或右上角?如果684是西向东的,因为它在每个文件中的.nc头信息中说明,那么我似乎应该准确读取第一个图中的一半数据点和所有北 - 南点,然后这个改为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
答案 0 :(得分:0)
在给出更多信息之前,我会给你一些问题的部分答案。我将使用Matlab multidimention syntax。:
专注于此部分ncread(nametest,myVarName,[1 1 1], [ 684/2 447 72 ])
这将从索引(1,1,1)开始,读取342行,447列,72页(小时)。如果您对尺寸的假设是正确的,那么这应该是" western"文件中所有时间的数据。
获得"东部"你会这样做:
ncread(nametest,myVarName,[684/2+1 1 1], [ 684/2 447 72 ])
这将从第343行(东部开始),第1列,第1页(小时)开始,并读取相同数量的行,列和&以前的页面。
注意:从ncread docs开始,最后一个参数是count
长度为N的向量,指定沿着要读取的元素数 相应的尺寸。如果计数的特定元素是Inf, ncread读取数据直到相应维度结束。
因此,在每次读取相同数量的数据时,这不会在West和East调用ncread之间发生变化。但是,您可以使用Inf
代替数字。