根据特定尺寸值有效地自动化4d阵列缩减

时间:2014-10-04 20:38:47

标签: arrays automation netcdf

作为序言,我相当缺乏经验,所以我的术语可能会关闭,因此在搜索论坛时我找不到任何东西。

我有一个巨大的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元素)。我觉得效率至关重要,所以请分享任何其他更有效的方式到达同一个地方!

非常感谢!!!

1 个答案:

答案 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

感谢您的帮助!