2010-11-28 10 views
5

मैं कोड का एक टुकड़ा तेजी लाने के लिए Cython उपयोग करने के लिए कोशिश कर रहा हूँ के साथ लैम्ब्डा समारोह का उपयोग कर। जब मैं लैम्ब्डा फ़ंक्शंस का उपयोग करता हूं तो साइथन एक त्रुटि दे रहा है जो "अपेक्षित पहचानकर्ता या शाब्दिक" पढ़ता है। जहां तक ​​मैं कह सकता हूं, लैम्ब्डा फ़ंक्शन साइथन 0.13 में समर्थित होने के लिए हैं। क्या मैं इस बिंदु पर गलत हूं? यदि वे वास्तव में समर्थित हैं, तो क्या मुझे उनके लागू करने के लिए यहां कुछ और करने की ज़रूरत है?समय त्रुटि Cython

def f(e_1, e_2, rho): 
    """Bivariate Normal pdf with mean zero, unit variances, and correlation coefficient rho.""" 
    return (1.0/(2.0 * pi * sqrt(1 - rho**2))) * exp(-(1.0/(2*(1 - rho**2))) * (e_1**2 + e_2**2 - 2*rho*e_1*e_2)) 

def P_zero(b_10, b_11, b_20, b_21, rho, gamma, x): 
    """Returns the probability of observing zero entrants in a market by numerically 
    integrating out the unobserved firm-specific profit shocks.""" 
    h_z = lambda e_1: -inf 
    g_z = lambda e_1: -b_10 - b_11*x[0] - gamma*x[1] 
    I = lambda e_1, e_2: f(e_1, e_2, rho) 
    return dblquad(I, -inf, (-b_20 - b_21*x[0] - gamma*x[2]), h_z, g_z)[0] 
+0

सटीक रूप से कौन सी रेखा आपको त्रुटि देती है? – Gabe

+0

मुझे लगता है कि तुम्हारा मतलब 'मैं = लैम्ब्डा E1, E2: च (E1, E2, रो)' – razpeitia

+0

ठीक है, खेद है। H_z की परिभाषा त्रुटि खींच रही है। –

उत्तर

1

मेरी राय में आप h_z = lambda e_1: -float('inf') साथ h_z = lambda e_1: -inf बदलना चाहिए जब तक आप inf कहीं और परिभाषित किया है।

0

मैं नीचे सरलीकृत Cython कोड संकलन और ठीक पर ओएस एक्स 10.6.6 Cython 0.14.1 का उपयोग कर इसे चलाने के लिए सक्षम हूँ। मुझे विवरण नहीं पता कि यह 0.13 पर क्यों काम नहीं करता है। यदि संभव हो तो साइथन को अपग्रेड करना सबसे आसान समाधान है।

def f(e_1, e_2, rho): 
    return e_1 + e_2 + rho 

def dummy(a, b, c, d, e): 
    return [a(1,2) + b + c + d(1) + e(3)] 

def P_zero(b_10, b_11, b_20, b_21, rho, gamma, x): 
    h_z = lambda e_1: -1000 
    g_z = lambda e_1: -b_10 - b_11 * x[0] - gamma * x[1] 
    I = lambda e_1, e_2: f(e_1, e_2, rho) 
    return dummy(I, -1000, (-b_20 - b_21 * x[0] - gamma * x[2]), h_z, g_z)[0] 

print P_zero(1, 2, 3, 4, 5, 6, [6, 7, 8]) 
# outputs "-2122" 
संबंधित मुद्दे