'numpy.float64'对象不可调用

时间:2015-01-02 02:05:03

标签: python numpy matplotlib

由于某种原因我无法解决问题,所以TypeError: 'numpy.float64' object is not callable代表以下代码:

import pylab as pl
import scipy as sp
import numpy as num

import scipy.integrate as spi
import matplotlib.pyplot as mat
import scipy.optimize as spo
from itertools import cycle
from matplotlib.font_manager import FontProperties

rs=.14
ra=0.0027
Mz=91.
ja=0.81
js=-.033
Gz=2.5
k=10**6
def sig_a(s,Gz):
    return (sp.pi)*((s*ra+(s-Mz**2)*ja)/((s-Mz**2)**2+Mz**2*Gz**2))
def sig_s(s,Gz):
    return (4*sp.pi/3)*(1/s+(s*rs+(s-Mz**2)*js)/((s-Mz**2)**2+Mz**2*Gz**2))

cos_theta=num.arange(-0.95,0.95,0.05)
E=num.arange(20,140,.1)
s=E**2


def f_theta(x,s):
    ans=k*(sig_s(s,Gz)*(1+(x)**2)+sig_a(s,Gz)*x)
    return and


d=num.arange(0.05,1.80,0.25)
x1=[]
for t in cos_theta:
    m=((t+t+0.05)/2)
    x1.append(m)
x01=num.array(x1)
def N_mu1(x0,sig_a,sig_s):     #<-------d=0.05
    n=(k*(sig_s*((x0**2.)*0.05+(0.05/4.)+(0.05**3.)/(12.))+sig_a(2.*x0*0.05)))
    return n

idealN=[]
randomN=[]
est_sig_a=[]
est_sig_s=[]
ratio_error=[]     
for i in s:
    for j in cos_theta:
        n=(spi.quad(f_theta,j,j+0.05,args=i))
        idealN.append(n[0])
    for k in idealN:
        r=num.random.poisson(k,1)
        randomN.append(r[0])
    siga=sig_a(i,Gz)
    sigs=sig_s(i,Gz)
    R=num.array(randomN)
    Error=(R**0.5)
    po,po_cov=spo.curve_fit(N_mu1,x01,R,[siga,sigs],Error)
    est_sig_a.append(po[0])
    est_sig_s.append(po[1])
    e=((((po_cov[0])/(po[0]))+((po_cov[1])/(po[1])))*((po[0])/(po[1])))
    ratio_error.append(e)
    idealN=[]
    randomN=[]

错误显示是:

TypeError                                 Traceback (most recent call last)
    118     R=num.array(randomN)
    119     error=(R**0.5)
--> 120     po,po_cov=spo.curve_fit(N_mu1,x01,R,[siga,sigs],error)
    121     est_sig_a.append(po[0])
    122     est_sig_s.append(po[1])


TypeError: 'numpy.float64' object is not callable

我正在努力在代码中找到错误。

2 个答案:

答案 0 :(得分:4)

问题在于:

def N_mu1(x0,sig_a,sig_s):     #<-------d=0.05
    n=(k*(sig_s*((x0**2.)*0.05+(0.05/4.)+(0.05**3.)/(12.))+sig_a(2.*x0*0.05)))
    return n                                              # ^ argument is an array not function 

sig_a是你的函数的一个参数,所以它没有引用你定义的sig_a函数,并且在这个函数中它被调用就好像它一样。

答案 1 :(得分:1)

f_thetareturn ans更改为return and

同样sig_a(2.*x0*0.05)应更改为sig_a*(2.*x0*0.05)中的N_mu1

这些更改将使您的程序可执行。