用python模拟核密度的问题

我想使用内核密度进行模拟观察,但我有以下错误类型: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'


手掌心
浏览 164回答 1
1回答

慕的地8271018

它在你的定义中:def&nbsp;k_gaussien(x): &nbsp;&nbsp;&nbsp;&nbsp;sigma=1 &nbsp;&nbsp;&nbsp;&nbsp;if(sigma<=0): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 类型,这是行不通的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python