我正在使用scipy和numpy在python中工作。假设我想用几个Beta发行版做一些事情。特别是,我想学习Beta(1,4),Beta(2,5)和Beta(3,6)。我可以定义priorArray
,它是一个scipy分布对象,从中我可以绘制值的数组。
from scipy.stats import beta
import numpy as np
priorArray = beta((1,2,3),(4,5,6))
z = priorArray.pdf(0.3)
print type(z)
这似乎像预期的那样工作。但是,如果我想从这个分布数组中提取一个分量分布(例如,Beta(2,4)):
priorArray[1]
这会导致一个错误:
TypeError: 'rv_frozen' object does not support indexing
所以priorArray
不是我可以索引的对象类型,即使对象的许多方法如预期的那样返回数组值。
所以我的问题是:有没有办法从一组分布中提取一个分布?
发布于 2020-01-09 23:48:44
您可以使用args
属性恢复传递给beta
的值:
In [10]: priorArray = beta((1, 2, 3), (4, 5, 6))
In [11]: priorArray.args
Out[11]: ((1, 2, 3), (4, 5, 6))
In [12]: [p[1] for p in priorArray.args]
Out[12]: [2, 5]
要遍历成对的参数,您可以这样做:
In [14]: for a, b in zip(*priorArray.args):
...: print(a, b)
...:
1 4
2 5
3 6
https://stackoverflow.com/questions/59666710
复制相似问题