Klimapy / 开始使用 / Field 与数据入口
Klimapy 1.2.1 · 变量、单位、日历和质量控制规则见相应函数说明。

Field 与原生数据入口

Field 是什么

klimapy.native.Field 将数值与维度、坐标、属性一起传递。它是 eager 容器:传入或读取的数值已经位于内存中。

字段 含义
values NumPy 数组
dims 与数组轴一一对应的唯一维度名称
coords 每个维度的同长度一维坐标
attrs 变量属性,例如 units
name 变量名,默认 value
coordinate_attrs 坐标属性,例如 time 的 units、calendar
import numpy as np
from klimapy.native import Field

pr = Field(
    values=np.ones((365, 2, 2)),
    dims=("time", "lat", "lon"),
    coords={"time": np.arange(365), "lat": [30, 31], "lon": [110, 111]},
    attrs={"units": "mm/day"}, name="pr",
    coordinate_attrs={"time": {
        "units": "days since 2001-01-01", "calendar": "standard"
    }}
)

坐标长度、轴数或维度名称不匹配会报错,不进行自动广播对齐。

从 NetCDF 读取

from klimapy.native import read_field

pr = read_field("daily_pr.nc", "pr", indexers={
    "lat": slice(0, 16), "lon": slice(0, 16)
})
one_day = pr.isel(time=0)
print(pr.shape, pr.dims, pr.attrs)
print(pr.time.dates())

read_field 只读取指定区域并关闭输入文件;isel 是对已有 Field 的位置选择。标量选择会移除对应维度。spatial_chunk_size 控制后续计算,不会将 Field 变成惰性数据。

时间与日历

TimeAxis 保存 CF 数值时间与 units/calendar,也支持 YYYYMMDD 日期编码。日尺度分析拒绝重复、倒序和非日尺度输入;指标适配层会将缺失日期补为 NaN,再执行覆盖率判断。

支持的日历包括 standard / Gregorian、proleptic Gregorian、Julian、noleap、all_leap 和 360_day。不同日历的年长度不同,不应直接把所有年份都当作 365 天。支持范围为公元 1 至 9999 年。

写出结果

pr.to_netcdf("new_daily_pr.nc")

路径需尚不存在,避免意外覆盖。文件坐标必须是数值类型;时间写出应带正确的 CF units 和 calendar。字段属性不会替你推断真实的数据单位。

低层文件访问

from klimapy.native import Dataset

with Dataset("daily_pr.nc") as ds:
    print(ds.variables)
    block = ds["pr"][0:30, 0:16, 0:16]

Dataset 使用上下文管理器关闭原生句柄。高级别流程优先使用 read_field;大数据文件可通过 Dataset 明确切片,再调用相应算法。各算法输入轴的要求见功能章节。