思路:
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)