拟合 scipy 分布并使用 nd numpy 数组检索 cdf

问题描述 投票:0回答:0

我想拟合

gamma
分布并使用 nd numpy 数组(xarray DataArray)上的拟合参数获得
cdf
。目前,我可以用一维 numpy 数组来实现,但无法在 nd 数组上实现。非常欢迎任何其他方法。

这里是示例代码。

import xarray as xr
import numpy as np
import pandas as pd
import scipy.stats as st
# make some random data
random_data=np.random.randint(1,100,(100,50,50))
# Make ramdom datetime 
time_dim=pd.date_range("2000-01-01",periods=len(random_data),freq='MS')
# Make DataArray
test_data=xr.DataArray(random_data,dims=("time","y","x"))
# Fit gamma distribution to one data point. It works
x=test_data.isel(x=12,y=12)
shape,loc,scale=st.gamma.fit(x, scale=np.std(x))
cdf=st.gamma.cdf(x, shape,loc,scale)

test_data["time"]=time_dim
# Fitting gamma distribution and calculate cdf to each data point as time dimension. But it failed.
gamma_fit=lambda data,std_scale: st.gamma.fit(data, scale=std_scale)
std_scale=test_data.std("time")

shape, loc, scale=xr.apply_ufunc(gamma_fit,test_data, std_scale)
cdf = st.gamma.cdf(test_data, pars, loc=loc, scale=scale)
python-3.x scipy numpy-ndarray python-xarray
© www.soinside.com 2019 - 2024. All rights reserved.