首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法最大限度地减少唯一组合的数量?

有没有办法最大限度地减少唯一组合的数量?
EN

Stack Overflow用户
提问于 2020-03-03 15:48:59
回答 1查看 70关注 0票数 0

正在尝试请求ERA5数据。请求受大小限制,系统会自动拒绝任何超过限制的请求。然而,人们希望尽可能接近请求限制,因为每个请求都需要几个小时才能被气候数据存储(CDS)处理。

例如,我有一个向量years <- seq(from = 1981, to = 2019, by = 1)和一个向量variables <- c("a", "b", "c", "d", "e"...., "z")。最大请求大小为11,表示长度(年)*长度(变量)必须小于等于11。

对于每个请求,我必须提供一个包含年份和变量的字符向量的列表。例如:req.list <- list(year = c("1981", "1982", ..."1991"), variable = c("a")),这是可行的,因为有11年和1个变量。

我考虑使用expand.grid(),然后使用行1-11,行12-22,每列的...and唯一()值来获取请求的年份和变量。但是这种方法有时会导致请求太大:req.list <- list(year = c("2013", "2014", ..."2018"), variable = c("a", "b"))会被拒绝,因为长度(年份)*长度(变量)= 12 > 11。

我还使用foreach()和doParallel来创建多个请求(一次最多15个请求)。

如果有人有更好的解决方案,请分享(在遵守请求大小限制的同时最小化唯一组合的数量),非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2020-03-04 22:49:38

限制是根据字段的数量设置的,人们可以将其视为grib意义上的“记录”数量。但对于ERA5来说,这是一个选择问题,因为数据都在缓存中,而不是在磁带机上,对于基于磁带机的请求,使用单个请求检索同一磁带上的数据非常重要(即,如果您使用ERA5检索季节预报或其他非CDS的数据集)。

这是一个简单的循环示例:

代码语言:javascript
运行
复制
import cdsapi

c = cdsapi.Client()

yearlist=[str(s) for s in range(1979,2019)]

for year in yearlist:
    c.retrieve(
    'reanalysis-era5-single-levels',
    {
        'product_type': 'reanalysis',
        'format': 'netcdf',
        'variable': [
            '10m_u_component_of_wind', '10m_v_component_of_wind', '2m_dewpoint_temperature',
            '2m_temperature',
        ],
        'year': year,
        'month': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
        ],
        'day': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
            '13', '14', '15',
            '16', '17', '18',
            '19', '20', '21',
            '22', '23', '24',
            '25', '26', '27',
            '28', '29', '30',
            '31',
        ],
        'time': [
            '00:00', '01:00', '02:00',
            '03:00', '04:00', '05:00',
            '06:00', '07:00', '08:00',
            '09:00', '10:00', '11:00',
            '12:00', '13:00', '14:00',
            '15:00', '16:00', '17:00',
            '18:00', '19:00', '20:00',
            '21:00', '22:00', '23:00',
        ],
    },
    'data'+year+'.nc')

我假设你可以将它与foreach并行化,尽管我从未尝试过,但我认为它不会有太大帮助,因为每个用户有一个相当低的作业限制,所以你最终会在队列中有大量的作业……

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

https://stackoverflow.com/questions/60502413

复制
相关文章

相似问题

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