Python 求给定其名称和参数的分布的平均值和标准偏差

Python 求给定其名称和参数的分布的平均值和标准偏差,python,python-3.x,scipy,distribution,Python,Python 3.x,Scipy,Distribution,我使用以下代码从scipy.stats的iris数据集生成了以下内容 import scipy.stats as st def get_best_distribution(data): dist_names = ["norm", "exponweib", "weibull_max", "weibull_min", "pareto", "genextreme"] dist_results = [] params = {} for dist_name in dist_

我使用以下代码从scipy.stats的iris数据集生成了以下内容

import scipy.stats as st
def get_best_distribution(data):
    dist_names = ["norm", "exponweib", "weibull_max", "weibull_min", "pareto", "genextreme"]
    dist_results = []
    params = {}
    for dist_name in dist_names:
        dist = getattr(st, dist_name)
        param = dist.fit(data)

        params[dist_name] = param
        # Applying the Kolmogorov-Smirnov test
        D, p = st.kstest(data, dist_name, args=param)
        print("p value for "+dist_name+" = "+str(p))
        dist_results.append((dist_name, p))

    # select the best fitted distribution
    best_dist, best_p = (max(dist_results, key=lambda item: item[1]))
    # store the name of the best fit and its p value

    print("Best fitting distribution: "+str(best_dist))
    print("Best p value: "+ str(best_p))
    print("Parameters for the best fit: "+ str(params[best_dist]))

    return best_dist, best_p, params[best_dist]
获得自:

我现在想得到平均值和标准偏差。与最佳结果的差异。查看了类似的内容,但我无法理解如何使用SciPy实现这一点

我们将非常感谢您的一些见解

保存分发对象,而不是保存分发的名称。要做到这一点,就要改变

        dist_results.append((dist_name, p))

然后将函数中的三条print语句和return语句更改为

    print("Best fitting distribution:", best_dist.name)
    print("Best p value: "+ str(best_p))
    print("Parameters for the best fit:", params[best_dist.name])

    return best_dist, best_p, params[best_dist.name]
然后你可以这样做:

dist, p, par = get_best_distribution(data)

print("mean:", dist.mean(*par))
print("std: ", dist.std(*par))

谢谢你的宝贵意见/建议!直接调用distribution对象完全忘记了:我也可以像你建议的那样获得平均值和标准偏差。
    print("Best fitting distribution:", best_dist.name)
    print("Best p value: "+ str(best_p))
    print("Parameters for the best fit:", params[best_dist.name])

    return best_dist, best_p, params[best_dist.name]
dist, p, par = get_best_distribution(data)

print("mean:", dist.mean(*par))
print("std: ", dist.std(*par))