在scipy.stats.rv_continuous上调用`rvs`或`pdf`时,数组作为参数

时间:2017-04-06 16:26:45

标签: python numpy scipy

我正在使用scipy.stats.rv_continuous从自定义分发中创建随机变量。我的发行版有很多参数,我可能想调整一下,事件参数的数量不一定需要保持固定。这就是目前的样子:

class Test_gen(rv_continuous):
    v = np.array([0.0, 0.1, 0.1])

    def _pdf(self, x):
        return 1.0/2/np.pi * (1 + np.sum(2 * self.v * np.cos(x)))

test = Test_gen(name='test', a=0, b=2*np.pi)
np.random.seed(42)
test.pdf(0)

>>> 0.22281692032865347

正如您所看到的,我正在使用v数组中的所有值来生成单个随机变量 - 正如预期的那样。我现在正在尝试在调用v时将test.pdf向量作为形状参数传递。据我所知,我只需在v函数中添加_pdf参数。但是,由于v是一个向量,scipy认为我想要对调用进行向量化,以便一次生成几个随机变量。因此,它试图播放我给出的论点并产生一个我无法理解它来自何处的结果。这是一个不起作用的例子:

class Test_gen(rv_continuous):
    def _pdf(self, x, v):
        print "Got `v` as: ", v
        return 1.0/2/np.pi * (1 + np.sum(2 * v * np.cos((x ))))

test = Test_gen(name='test', a=0, b=2*np.pi)
np.random.seed(42)

test.pdf(0, v=np.array([0, 0.1, 0.1]))

>>> Got `v` as:  [ 0.1  0.1]
>>> array([        nan,  0.22281692,  0.22281692])

我希望后一个例子像第一个例子一样产生0.22281692032865347(作为标量)。如果我打算将它们全部用于生成单个变量,那么如何使用向量作为参数?

0 个答案:

没有答案