我正在使用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
(作为标量)。如果我打算将它们全部用于生成单个变量,那么如何使用向量作为参数?