我想使用内核密度进行模拟观察,但我有以下错误类型: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 类型,这是行不通的。
添加回答
举报
0/150
提交
取消