gpt4 book ai didi

python - 如何从 netcdf 文件中提取投影在不规则网格上的变量的像素值?

转载 作者:行者123 更新时间:2023-12-01 06:51:16 24 4
gpt4 key购买 nike

我有一个 netcdf 文件,其中包含以下(示例)变量:

纬度

经度

温度

尺寸以 [x, y](像素坐标)为单位,主要是因为纬度和经度都是不规则网格的二维数组。

我想提取例如中的温度像素值。 53.55, 3.5(纬度/经度十进制坐标)。通常,对于一维纬度/经度数组,我可以使用 numpy.argmin() 来查找纬度/经度的索引,从而找到温度变量的像素坐标。

或者,在 xarray 中,我可以使用例如。

import xarray as xr
ds = open_dataset(some_file)
ds.close()
ds.temperature.sel(lat=53.55, lon=3.5, method='nearest')

除了我的尺寸现在为 (x, y)。也许是由于对 netcdf 数据格式的了解不足,但我无法想出提取所需数据的方法。如何提取我需要的像素值?如果我能更好地澄清这个问题,请告诉我。

最佳答案

如果您首先计算每个(2D)网格点到您请求的位置的距离,您仍然可以使用argmin()。小例子:

import xarray as xr
import numpy as np

f = xr.open_dataset('tauu.his.NETHERLANDS.NL_W.DOWA_40h12tg2_fERA5_WF2019_fix.201601.nc')

# 2D latitude and longitude
lons = f['lon'].values
lats = f['lat'].values

# Goal latitude and longitude
lon = 4.
lat = 52.

# Calculate distance (in degrees..) for all grid points
distance = np.sqrt( (lons-lon)**2 + (lats-lat)**2 )

# `argmin` on a 2D (or 3D, 4D, ..) field gives the index in the flattened array:
ji = distance.argmin()

# "Unravel" the index:
j,i = np.unravel_index(ji, lons.shape)

print(lons[j,i], lats[j,i]) # Prints: 3.989169 52.00158

在本例中,我简单地使用了以度为单位的欧几里得距离。您始终可以用更奇特或更准确的东西来替换它,例如球坐标中的距离。

关于python - 如何从 netcdf 文件中提取投影在不规则网格上的变量的像素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com