2017-03-02 3 views
0
Could anyone tell me why I'm getting the error type: AttributeError: 'builtin_function_or_method' object has no attribute 

'size' in like 57?
for this synthax: out=np.zeros((x.size,y.size))Q2: AttributeError: 'builtin_function_or_method' objet n'a pas d'attribut 'taille'

import numpy as np 
import sympy as sp 
from numpy import exp,sqrt,pi 
from sympy import Integral, log, exp, sqrt, pi 
import math 
from numpy import array 
import matplotlib.pyplot as plt 
import scipy.integrate 
from scipy.special import erf 
from scipy.stats import norm, gaussian_kde 
from quantecon import LAE 
from sympy.abc import q 
#from sympy import symbols 
#var('q') 
#q= symbols('q') 

## == Define parameters == # 
mu=80 
sigma=20 
b=0.2 
Q=80 
Q1=Q*(1-b) 
Q2=Q*(1+b) 
d = (sigma*np.sqrt(2*np.pi)) 
phi = norm() 
n = 500 

#Phi(z) = 1/2[1 + erf(z/sqrt(2))]. 

def p_k_positive(x, y): 
    # x, y = np.array(x, dtype=float), np.array(y, dtype=float) 
    Positive_RG = norm.pdf(x[:, None] - y[None, :]+Q1, mu, sigma) 
    print('Positive_R = ', Positive_RG) 
    return Positive_RG 

def p_k_negative(x, y): 
    # x, y = np.array(x, dtype=float), np.array(y, dtype=float) 
    Negative_RG = norm.pdf(x[:, None] - y[None, :]+Q2, mu, sigma) 
    print('Negative_RG = ', Negative_RG) 
    return Negative_RG 

def p_k_zero(x, y): 
    # x, y = np.array(x, dtype=float), np.array(y, dtype=float) 
    Zero_RG = (1/(2*math.sqrt(2*math.pi)))*(erf((x[:, None]+Q2-mu)/(sigma*math.sqrt(2)))-erf((x[:, None]+Q1-mu)/(sigma*math.sqrt(2)))) 
    #Zero_RG =norm.pdf 
    print('Zero_RG',Zero_RG) 
    return Zero_RG 

def myFilter(x,y): 
    x, y = x.squeeze, y.squeeze 
    out=np.zeros((x.size,y.size)) 
    xyDiff = x[:, None] - y[None, :] 
    out=np.where(np.bitwise_and(y[None, :] > 0.0, xyDiff >= -Q1), p_k_positive(x, y), out) # unless the sum functions are different 
    out=np.where(np.bitwise_and(y[None, :] < 0.0, x[:, None] >= -Q1), p_k_negative(x, y), out) 
    out=np.where(np.bitwise_and(y[None, :] ==0.0, xyDiff >= -Q1), p_k_zero(x, y), out) 
    return out 


Z = phi.rvs(n) 
X = np.empty(n) 
for t in range(n-1): 
    X[t+1] = X[t] + Z[t] 
    #X[t+1] = np.abs(X[t]) + Z[t] 
psi_est = LAE(myFilter, X) 
k_est = gaussian_kde(X) 

fig, ax = plt.subplots(figsize=(10,7)) 
ys = np.linspace(-200.0, 200.0, 200) 
ax.plot(ys, psi_est(ys), 'g-', lw=2, alpha=0.6, label='look ahead estimate') 
ax.plot(ys, k_est(ys), 'k-', lw=2, alpha=0.6, label='kernel based estimate') 
ax.legend(loc='upper left') 
plt.show() 
+0

Vous n'appelez toujours pas 'myFilter', car vous ne lui avez pas donné d'arguments. Vous passez toute la fonction à "LAE" et à moins que ce ne soit prévu - qui sait ce qu'il fait. –

+0

L'estimateur anticipé est une classe de quentecon. Il attend seulement (p, X) comme construit que je l'ai mal compris. Voici la classe et ce qui se passe à l'intérieur en quelques lignes. http://quanteconpy.readthedocs.io/en/latest/_modules/quantecon/lae.html#LAE. ici p = 'myFilter ' –

+0

D'où vient le' phi.rvs'? Quelle est sa sortie? –

Répondre

0

x, y = x.squeeze, y.squeeze

Devrait être

x, y = x.squeeze(), y.squeeze()

ou vous essayez de prendre la size d'un fonction.

+0

Merci beaucoup @daniel Forsman. –