问题描述
是否有一种简单的方法可以从 xarray 数据集中获取 xyz 值数组(即 3 个列和 nrows = 像素数的数组)?类似于我们从 R 中的 rasterToPoints 函数得到的东西。
我正在打开一个 netcdf 文件,其中包含某个变量 (chl) 的值。我无法直接在此处添加图像,但这是输出的屏幕截图:
我需要以具有此结构的数组结尾:
[[lon1,lat1,val],[lon1,lat2,val]]
依此类推,获得每个点的 lon/lat 组合。如果我遗漏了一些非常明显的东西,我很抱歉,但我是 Python 新手。
解决方法
我可以给你推荐一个小的伪代码:
import numpy as np
lons = ds.variables['lon'].load()
lats = ds.variables['lat'].load()
chl = ds.variables['chl'].load()
xm,ym = np.meshgrid(lons,lats)
dataout = np.concatenate((xm.flatten()[np.newaxis,:],ym.flatten()[np.newaxis,chla.flatten()[np.newaxis,:]),axis=0)
可能无法开箱即用,但至少有一种解决方案可能与此类似。
,您可能在这里寻找的自然格式是 Pandas 数据框,其中 lon、lat 和 chl 是列。这可以使用 xarray 的 to_dataframe
方法轻松创建,如下所示。
import xarray as xr
ds = xr.open_dataset("infile.nc")
df = (
ds
.to_dataframe()
.reset_index()
)