CDO-remaplaf算法的简易实现-使用MCD12C1数据重采样

思路:

MCD12C1原始数据为0.05°土地覆盖类型,实际研究中需要将其重采样到合适的分辨率以匹配其他数据,可以使用 Largest area frction 算法进行 remap。
简而言之,就是将区域内占比最大的土地覆盖类型视为该区域的土地覆盖。

Tip

jupyter在numba函数运行后内核挂掉可能是因为索引出现问题,示例:

x = np.arange(10)
y = x[1000]

Code:

imort numpy as np
import netCDF4 as nc
from numba import njit, prange

## load dataset
ds = nc.Dataset('/ZYH/datasets/MCD12C1/MCD12C1.A2003001.061.2022151221423.hdf')

## define the function
@njit(parallel=True)
def remap_laf(data, lenx):
    """
    data: 原始数据
    deltax: 每个降尺度网格在x方向上包含的网格数"""
    
    remap_result = np.zeros((int(data.shape[0]/lenx), int(data.shape[1]/lenx), 17))
    for i in prange(remap_result.shape[0]):
        for j in prange(remap_result.shape[1]):
            term = data[lenx*i:lenx*(i+1), lenx*j:lenx*(j+1)]
            for kk in prange(17):
                remap_result[i, j, kk] = np.sum(term==kk)

    return remap_result

data = ds.variables['Majority_Land_Cover_Type_1'][:].data
remap_result = remap_laf(data, 5)
remap = np.argmax(remap_result, axis=-1)

结果展示

原始数据

plt.matshow(data)

在这里插入图片描述
重采样后

plt.matshow(remap)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值