You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正确计算2月每日海温数据的月最小、平均和最大值?

如何用Python正确计算2月每日海温数据的月最小、平均和最大值?

我来帮你梳理下当前代码的问题,再给你一个更可靠的解决方案:

先说说你之前代码的核心问题

第一个版本(双索引变量)的问题

你用了ind_time_28和ind_time_29两个独立的计数器,这会导致数据覆盖:平年的填充位置从0开始,闰年的填充位置也从0开始,直接把前面平年的数据覆盖了。而且虽然数组总长度刚好是311,但填充顺序完全混乱,再加上初始的0值没被完全覆盖,才会出现最小值为0、最大值反而比平均值小的诡异结果。

第二个版本(单索引变量)的问题

你改用单个ind_time后,切片的计算逻辑错了:平年和闰年的天数不同,不能用天数*ind_time来计算起始位置。比如第8个平年结束后,ind_time变成7,下一个闰年ind_time变成8,切片起始位置是29*8=232,但此时数组的224-231位置是空的(初始0),后续闰年的切片还会超出数组总长度,导致维度不匹配的错误。

另外,手动指定日期切片还可能踩「是否包含最后一天」的坑,不如直接按月份筛选更可靠。

改进后的解决方案:用列表收集数据再合并

不用手动初始化数组、计算索引,直接把每年2月的数据收集到列表里,最后合并成大数组,这样既避免了索引错误,又能准确获取所有2月数据:

import xarray as xr
import numpy as np
import copernicusmarine

# 打开数据集,筛选指定区域和深度
DS = copernicusmarine.open_dataset(
    dataset_id="cmems_mod_glo_phy_my_0.083deg_P1D-m",
    minimum_longitude=-1.68,
    maximum_longitude=-1.56,
    minimum_latitude=49.63,
    maximum_latitude=49.67,
    minimum_depth=0,
    maximum_depth=0
)

# 用来存储每年2月的海温数据
february_data = []

# 遍历2010到2020年
for year in range(2010, 2021):
    print(f"处理年份:{year}")
    # 直接筛选该年份2月的所有数据,自动适配平年闰年
    feb_subset = DS.thetao.sel(
        time=(DS.time.dt.year == year) & (DS.time.dt.month == 2)
    )
    # 将当月数据添加到列表
    february_data.append(feb_subset.data)

# 按时间轴(第0轴)合并所有年份的2月数据
var_arr = np.concatenate(february_data, axis=0)

# 计算统计值,用nan开头的函数忽略缺失值
minimum = np.nanmin(var_arr)
print(f"最低温度:{minimum}")

mean_temp = np.nanmean(var_arr)
print(f"平均温度:{mean_temp}")

maximum = np.nanmax(var_arr)
print(f"最高温度:{maximum}")

为什么这个方法更靠谱?

  1. 自动适配平年闰年:用dt.month ==2筛选,不用手动判断年份和天数,完全避免日期切片的问题。
  2. 无索引错误:列表收集数据后合并,不会出现填充位置重叠、超出数组长度的问题,所有数据都是实际的海温值,没有初始0值干扰统计结果。
  3. 代码更简洁:去掉了复杂的索引计算逻辑,可读性和维护性更好。

备注:内容来源于stack exchange,提问作者Camille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:19:30