How to get parameter arguments from a frozen spicy.stats distribution?
冻结分布
访问rv 冻结参数
在
例如,可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | import scipy.stats as stats # Parameters for this particular gamma distribution a, loc, scale = 3.14, 5.0, 2.0 # Do something with the general distribution parameterized print 'gamma stats:', stats.gamma(a, loc=loc, scale=scale).stats() # Create frozen distribution rv = stats.gamma(a, loc=loc, scale=scale) # Do something with the specific, already parameterized, distribution print 'rv stats :', rv.stats() |
1 2 | gamma stats: (array(11.280000000000001), array(12.56)) rv stats : (array(11.280000000000001), array(12.56)) |
是否可以访问
由于此功能很可能不会传递参数,因此是否有一种方法可以从稍后的冻结分布(
访问
是的,用于创建冻结分发的参数在分发实例中可用。它们存储在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import scipy.stats as stats # Parameters for this particular alpha distribution a, loc, scale = 3.14, 5.0, 2.0 # Create frozen distribution rv1 = stats.gamma(a, loc, scale) rv2 = stats.gamma(a, loc=loc, scale=scale) # Do something with frozen parameters print 'positional and keyword' print 'frozen args : {}'.format(rv1.args) print 'frozen kwds : {}'.format(rv1.kwds) print 'positional only' print 'frozen args : {}'.format(rv2.args) print 'frozen kwds : {}'.format(rv2.kwds) |
1 2 3 4 5 6 7 | positional and keyword frozen args : (3.14, 5.0, 2.0) frozen kwds : {} positional only frozen args : (3.14,) frozen kwds : {'loc': 5.0, 'scale': 2.0} |
奖金:处理
有一个私有方法,
1 2 3 4 5 6 7 8 9 | # Get the original parameters regardless of argument type shape1, loc1, scale1 = rv1.dist._parse_args(*rv1.args, **rv1.kwds) shape2, loc2, scale2 = rv2.dist._parse_args(*rv2.args, **rv2.kwds) print 'positional and keyword' print 'frozen parameters: shape={}, loc={}, scale={}'.format(shape1, loc1, scale1) print 'positional only' print 'frozen parameters: shape={}, loc={}, scale={}'.format(shape2, loc2, scale2) |
1 2 3 4 5 | positional and keyword frozen parameters: shape=(3.14,), loc=5.0, scale=2.0 positional only frozen parameters: shape=(3.14,), loc=5.0, scale=2.0 |
告诫
当然,使用私有方法通常是不好的做法,因为从技术上讲,内部API总是可以更改的,但是,有时它们提供了很好的特性,如果事情发生了变化,并且在python中没有真正私有的东西,则很容易重新实现。