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

用python模拟核密度的问题

用python模拟核密度的问题

手掌心 2021-08-14 17:47:03
我想使用内核密度进行模拟观察,但我有以下错误类型:TypeError:不支持的操作数类型为 +:'float' 和 'NoneType'如何解决?这是我使用的代码:    from matplotlib.pyplot import *    from math import *    from array import *    import numpy as np     from numpy.random import *    from scipy.misc import *    from scipy.stats import *    from scipy import *    from random import *    N=1000    n=30    lamb=0.5    X=lamb*tan(pi*(np.reshape(rand(n,1),n)-0.5)) #loi de Cauchy      x=1    alpha=0.45    def k_gaussien(x):        sigma=1        if(sigma<=0):            return((1/(sigma*sqrt(2*pi)))*exp(-(x**2/(2*sigma**2))))    def h(n,alpha):        for i in range(1,n):               return (i**(1-alpha))    def f_PR(x,X,alpha):        global F;        F = ones((n,1))        h_n = h(n,alpha)        for k in range(2,n):            for i in  range(1,k):                F[k] = F[k-1] + k_gaussien((x-X[i])*i**alpha)            F[k] = F[k-1] * h_n        return F    # Almost sure convergence f_n(x)--> f(x) ps    figure(figsize=(20,10))    fPR=f_PR(x,X,alpha)    T=linspace(1,n,n);    plot(cumsum(fPR)/T)    plot(T,(1/pi)*(lamb/(lamb**2 + y**2))*linspace(1,1,N),"r--",lw=3)#with Cauchy density    grid(True)    title("convergence presque sure",fontsize=20,color="blue")    #Convergence in mean N(0,e2f(x))    hist(fPR,bins=linspace(-10,10,50),normed=True)    y=linspace(-10,10,100);    v=(1/pi)*(lamb/(lamb**2 + y**2))    plot(y,(1/sqrt(2*pi)*v)*exp ((-(y*y)/(2*v**2)))*linspace(1,1,n),'r--') #with cauchy density    title("convergence asymptotique", fontsize=20,color="blue")TypeError Traceback(最近一次调用最后一次)<ipython-input-76-13bc86608417> in <module>()         38 # Almost sure convergence f_n(x)--> f(x) ps         39 figure(figsize=(20,10))    ---> 40 fPR=f_PR(x,X,alpha)         41 T=linspace(1,n,n);         42 plot(cumsum(fPR)/T)类型错误:不支持 + 的操作数类型:'float' 和 'NoneType'
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

它在你的定义中:

def k_gaussien(x):
    sigma=1
    if(sigma<=0):
           return((1/(sigma*sqrt(2*pi)))*exp(-(x**2/(2*sigma**2))))

您对 进行了硬编码sigma=1,但您的函数只会返回一些sigma<=0永远不会发生的情况。所以k_gaussien((x-X[i])*i**alpha)会回来None。因此F[k] = F[k-1] + k_gaussien((x-X[i])*i**alpha)尝试求和 float 和 None 类型,这是行不通的。


查看完整回答
反对 回复 2021-08-14
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信