0

我的问题可能看起来很愚蠢或很简单,但我无法找到解决方案。这是我的问题:我想编写一个指数功率分布函数,它可以在 scipy 中使用。但是,我不想为此使用 scipy。我该怎么做?

到目前为止,这是我的努力:

import math
import numpy as np

def ExpPowerFun(x,b, size=1000):
        distribution = b*x**(b-1)*math.exp(1+x**b-math.exp(x**b))
        return distribution

我根据这个scipy doc 使用了这个方程。公平地说,使用这个等式并使用它编写一个函数并没有多大作用。如您所见,它只返回一个值。我想在不使用 scipy 的情况下根据 scipy 的指数功率分布函数生成随机数分布。我class exponpow_gegithub 代码中查看过。但是,它使用scipy.special(-sc),所以它对我来说有点没用,除非有任何解决方法并避免使用 scipy.

我不知道该怎么做。同样,这可能是一项简单的任务,但我被困住了。请帮忙。

4

1 回答 1

0

为给定分布生成随机数的最简单方法是使用该函数的 CDF 的倒数,当您将其应用于均匀分布的数字时,PPF(百分比点函数)将为您提供所需的分布。

对于您的情况,PPF(直接取自 scipy 源代码并进行了一些修改)是:

np.power(np.log(1-np.log(1-x)), 1.0/b)

因此你的代码应该是这样的

def ExpPowerFun(b, size=1000):
    x = np.random.rand(size)
    return np.power(np.log(1-np.log(1-x)), 1.0/b)

import matplotlib.pyplot as plt
plt.hist(ExpPowerFun(2.7,10000),20)
plt.show()

编辑:均匀分布必须从 0 到 1 ofc,因为概率从 0% 到 100% 在此处输入图像描述

于 2021-12-07T00:35:54.327 回答