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

如何将GOLD卫星NetCDF数据的2D经纬度重格化为1D并选取研究区域?

GOLD卫星2D经纬度转1D及区域筛选优化方案

核心结论

完全可以将2D经纬度数组转换为标准1D维度,同时可以简化你当前的区域筛选代码,避免不必要的nan操作。


一、2D经纬度转1D的两种方法

根据GOLD卫星数据的网格类型(规则/不规则),选择对应方法:

1. 规则网格场景(最常见)

多数卫星数据的2D经纬度是规则网格:每一列纬度值一致,每一行经度值一致。直接提取单列/单行即可得到1D数组:

import numpy as np

# 提取1D纬度(取第一列,若实际是每一行纬度一致则取lats[0, :])
lat_1d = lats[:, 0]
# 提取1D经度(取第一行,若实际是每一列经度一致则取lons[:, 0])
lon_1d = lons[0, :]

# 可选:确保数组有序(部分数据可能乱序)
lat_1d = np.sort(lat_1d)
lon_1d = np.sort(lon_1d)

2. 不规则网格场景

如果经纬度是不规则分布的,先展平2D数组,再去重排序得到1D维度:

# 展平2D数组并去重排序
lat_1d = np.sort(np.unique(lats.flatten()))
lon_1d = np.sort(np.unique(lons.flatten()))

二、优化区域筛选代码

你当前的代码存在两个问题:

  • reallat = lats是引用赋值,修改reallat会直接改变原lats数组,应该用copy()创建副本
  • 用nan标记再找索引的方式冗余,直接用布尔掩码更高效

优化后的区域筛选代码:

import numpy as np

# 定义目标区域范围
lat_min, lat_max = 24, 31
lon_min, lon_max = -92, -84

# 创建布尔掩码:同时满足经纬度条件的所有位置
region_mask = (lats >= lat_min) & (lats <= lat_max) & (lons >= lon_min) & (lons <= lon_max)

# 提取符合条件的温度数据(自动展平为1D)
selected_temps = tdisk[:, region_mask]

# 计算平均值
avg_temp = np.mean(selected_temps)
print("Average Temps in Selected Region:", avg_temp)

三、新手友好工具:xarray库

处理NetCDF数据推荐使用xarray,它能自动管理维度,无需手动处理数组形状,大幅简化操作:

import xarray as xr

# 读取GOLD卫星NetCDF文件
ds = xr.open_dataset("your_gold_data.nc")

# 若经纬度是2D,转换为1D规则维度(假设规则网格)
ds = ds.assign_coords(
    latitude=("latitude", np.unique(ds.latitude[:, 0])),
    longitude=("longitude", np.unique(ds.longitude[0, :]))
)

# 直接按经纬度范围筛选区域
selected_ds = ds.sel(
    latitude=slice(lat_min, lat_max),
    longitude=slice(lon_min, lon_max)
)

# 计算平均温度
avg_temp = selected_ds.tdisk.mean().values
print("Average Temps in Selected Region:", avg_temp)

内容的提问来源于stack exchange,提问作者Merlot Ponti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:25:38