我有一个用 xarray 读取的 netCDF 文件。该数组包含时间、纬度、经度和只有一个数据变量(即索引值)
# read the netCDF files
with xr.open_mfdataset('wet_tropics.nc') as wet:
print(wet)
Out[]:
<xarray.Dataset>
Dimensions: (time: 1437, x: 24, y: 20)
Coordinates:
* y (y) float64 -1.878e+06 -1.878e+06 -1.878e+06 -1.878e+06 ...
* x (x) float64 1.468e+06 1.468e+06 1.468e+06 1.468e+06 ...
* time (time) object '2013-03-29T00:22:28.500000000' ...
Data variables:
index_values (time, y, x) float64 dask.array<shape=(1437, 20, 24), chunksize=(1437, 20, 24)>
到目前为止,一切都很好。现在我需要对数组中的每个网格单元应用一个广义的加法模型。我想使用的模型来自 Facebook Prophet ( https://facebook.github.io/prophet/ ),我之前已经成功地将它应用于 pandas 数据数组。例如:
cns_ap['y'] = cns_ap['av_index'] # Prophet requires specific names 'y' and 'ds' for column names
cns_ap['ds'] = cns_ap['Date']
cns_ap['cap'] = 1
m1 = Prophet(weekly_seasonality=False, # disables weekly_seasonality
daily_seasonality=False, # disables daily_seasonality
growth='logistic', # logistic because indices have a maximum
yearly_seasonality=4, # fourier transform. int between 1-10
changepoint_prior_scale=0.5).fit(cns_ap)
future1 = m1.make_future_dataframe(periods=60, # 5 year prediction
freq='M', # monthly predictions
include_history=True) # fits model to all historical data
future1['cap'] = 1 # sets cap at maximum index value
forecast1 = m1.predict(future1)
# m1.plot_components(forecast1, plot_cap=False);
# m1.plot(forecast1, plot_cap=False, ylabel='CNS index', xlabel='Year');
问题是现在我必须 1) 遍历 netCDF 文件的每个单元格,2) 通过时间获取该单元格的所有值,3) 应用 GAM(使用 fbprophet),然后导出并绘制结果。
问题:您对如何遍历栅格有任何想法,始终获取每个像素的 index_values 以便我可以运行 GAM?我认为嵌套的 for 循环是可行的,尽管我不知道如何制作一个遍历每个单元格的循环。
任何帮助表示赞赏