来自特定函数python的随机值

时间:2014-09-04 21:37:05

标签: python function random

让我说我想从线性分布函数中提取随机值,我不知道我会怎么做... 说我有一个函数y = 3x然后我希望能够从该行中提取一个随机值。 这就是我尝试过的:

 x,y = [],[]
 for i in range(10):
    a = random.uniform(0,3)
    x.append(a)
    b = 3*a
    y.append(b) 

这给出了从该线性函数中得到的y值(每个分布的分布)。现在,如果这是正确的,我将如何对看起来像水平线的分布做同样的事情?

如果我的水平线函数y = 3,那该怎么办呢?如何从那里取出随机值?

1 个答案:

答案 0 :(得分:1)

使用lambda或显式定义定义您的函数,然后调用它来获取y值:

def func(x):
    return 3

points = []
for i in range(10):
    x = random.uniform(0, 3)
    points.append((x, func(x))

在这种情况下,斜率为0的线性函数相当简单。

编辑:我想我现在更清楚地理解这个问题了。您是否希望随机生成位于曲线下方的点?直接计算任意函数是非常棘手的,并且您可能希望绑定到您的函数(即< x< b)。假设我们有一个绑定,一个简单的方法是在包含曲线的框中生成一个随机数,如果它不在曲线下,则简单地丢弃它。这将是完全随机的。

def linearfunc(x):
    return 3 * x

def getRandom(func, maxi, a, b):
    while True:
        x = random.uniform(a, b)
        y = random.uniform(0, maxi)
        if y < func(x):
            return (x, y)

points = [getRandom(linearFunc, 9, 0, 3) for i in range(10)]

此方法需要知道指定区间上函数的上限(maxi),并且上限越小,将发生的采样丢失越少。