作为序言,我相当缺乏经验,所以我的术语可能会关闭,因此在搜索论坛时我找不到任何东西。
我有一个巨大的4D大气高度数据(hgt)数组,包含在netcdf文件中的1900年。从概念上讲,我的项目范围很简单,在几个特定的压力水平下创建高度气候学(一年中每一天每个网格点的平均高度值),涉及141年的数据(每年的数据文件具有相同的格式) 。
hgt_1900 = ncread('hgt.1900.nc','hgt')
n = numel(hgt_1900)
n = 143488800
size(hgt_1900)
ans = 180 91 24 365
尺寸为经度,纬度,压力等级和时间(天)。考虑到阵列的大小,我认为在一天内将数据限制在一个压力水平(例如:4级)是可行的方法
hgt_1900_4_Day1 = hgt_1900(1:180, 1:91, 4, 1)
这会返回一个180x91的单变量,这很棒!但是,当我到hgt_1900_4_Day3时,我认为必须有一种方法来自动化这个过程。所以这就是我的尝试:
for day = 1:365
hgt_1900_4_Day'day' = hgt_1900(1:180, 1:91, 4, 'day')
day = +1
end
Error: File: Height850.m Line: 2 Column: 20
Unexpected MATLAB expression.
有人能否说明如何纠正这种意想不到的表情?我尝试过(可能不正确)使用genvarname函数,它正确生成了变量名,但是保留了4D变量格式并且没有得到正确的日期数据:
for day = 1:356
t = hgt_1900(1:180, 1:91, 4, 'day');
v = genvarname('hgt_1900_4_Day', who);
eval([v ' = t'])
end
size(hgt_1900_4_Day1)
ans = 180 91 1 3
size(hgt_1900_4_Day350)
ans = 180 91 1 3
假设我能够完成上述工作,我计划为每年的数据运行此脚本。然后通过平均hgt_1900_4_Day50,hgt_1901_4_Day50等创建气候学...
考虑到141年数据的累积大小(20231920800元素)。我觉得效率至关重要,所以请分享任何其他更有效的方式到达同一个地方!
非常感谢!!!
答案 0 :(得分:0)
我的兄弟帮助我找到了下面的代码,这就是我需要它做的事情!
for year = 1900:2012
baseVar = genvarname(['hgt_' int2str(year) '_4_Day'])
% Load hgt into memory
for day = 1:365
t = hgt(1:180, 1:91, 4, day);
v = genvarname([baseVar int2str(day)]);
eval([v ' = t;']);
end
clear hgt;
end
感谢您的帮助!