首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于特定尺寸值的4d阵列约简的高效自动化

基于特定尺寸值的4d阵列约简的高效自动化
EN

Stack Overflow用户
提问于 2014-10-04 20:38:47
回答 1查看 23关注 0票数 0

作为一个序言,我是相当缺乏经验,所以我的术语可能是错的,因此,为什么我找不到任何东西时,搜索论坛。

我有一个巨大的大气高度数据数组(hgt) 1900年包含在一个netcdf文件中。从概念上讲,我的项目范围很简单,创建一个高度气候学(一年中每一天的每个网格点的平均高度值)在两个特定的压力水平上,涉及141年的数据(每个年度数据文件都有相同的格式)。

代码语言:javascript
复制
hgt_1900 = ncread('hgt.1900.nc','hgt')
n = numel(hgt_1900)
n = 143488800

size(hgt_1900)
ans = 180  91  24  365

尺寸是经度、纬度、气压级和时间(天数)。考虑到数组的大小,我认为在某一天将数据限制在一个压力级(例如:4级)是可行的。

代码语言:javascript
复制
hgt_1900_4_Day1 = hgt_1900(1:180, 1:91, 4, 1)

这将返回一个180x91单变量,这是很棒的!然而,当我到达hgt_1900_4_Day3时,我发现必须有一种方法来实现这个过程的自动化。所以这就是我试过的

代码语言:javascript
复制
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变量格式,并且没有得到正确的天数据:

代码语言:javascript
复制
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元素)的累积大小。我觉得效率是至关重要的,所以请分享任何其他,更有效的方式到达同一个地方!

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 15:57:34

我哥哥帮我找到了下面的代码,这做了我需要它做的事情!

代码语言:javascript
复制
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

谢谢你的帮忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26196960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档