为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查 scipy 分布是否是离散的?

如何检查 scipy 分布是否是离散的?

元芳怎么了 2022-11-01 17:17:55
我想检查scipy分布是离散的还是连续的。无论对象是来自命名分发的冻结分发对象,还是自定义rv_discrete或rv_continuous分发的实例,测试都应该有效。我的第一个想法是检查变量的类型,但这似乎与连续与离散并不完全对应。例如,这里有四个分布:from scipy.stats import *import numpy as npdist_norm = norm(10, 2)dist_poisson = poisson(10)class continuous_gen(rv_continuous):    def _pdf(self, x, *args):        if x >= 0 and x <= 1:            return 1        else:            return 0dist_contin = continuous_gen()xk = np.arange(7)pk = (0.1, 0.2, 0.3, 0.1, 0.1, 0.0, 0.2)dist_discrete = rv_discrete(values=(xk, pk))以下是它们的类型:type(dist_norm)Out[59]: scipy.stats._distn_infrastructure.rv_frozentype(dist_poisson)Out[60]: scipy.stats._distn_infrastructure.rv_frozentype(dist_contin)Out[61]: __main__.continuous_gentype(dist_discrete)Out[62]: scipy.stats._distn_infrastructure.rv_sample现在我已经is_discrete()通过尝试访问该pmf()方法(只有离散分布具有)实现了一个功能,但我不确定这是否是最干净或最可靠的方法。有没有更好的办法?def is_discrete(dist):    try:        _ = dist.pmf(0)        return True    except:        return False
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

您可以使用isinstance内置函数来定义自定义检查:

from scipy.stats import poisson, norm, rv_discrete, rv_continuous


def is_discrete(dist):


    if hasattr(dist, 'dist'):

        return isinstance(dist.dist, rv_discrete)

    else: return isinstance(dist, rv_discrete)


def is_continuous(dist):


    if hasattr(dist, 'dist'):

        return isinstance(dist.dist, rv_continuous)

    else: return isinstance(dist, rv_continuous)


这将导致:


class continuous_gen(rv_continuous):

    def _pdf(self, x, *args):

        if x >= 0 and x <= 1:

            return 1

        else:

            return 0

dist_contin = continuous_gen()

dist_poisson = poisson(10)


is_discrete(dist_contin)

#False

is_continuous(dist_contin)

#True

is_discrete(dist_poisson)

#True

is_continuous(dist_poisson)

#False


查看完整回答
反对 回复 2022-11-01
  • 1 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号