Skip to content Skip to sidebar Skip to footer

Valueerror When Defining A Lambda Function In Python

I am receiving a ValueError when using integration, but I cannot understand why. Here is my simplified code: import numpy as np import scipy.integrate as integrate pbar = 1 p = np.

Solution 1:

You have a bunch of 1000 element arrays:

In[8]: p.shapeOut[8]: (1000,)
In[9]: K.shapeOut[9]: (1000,)
In[10]: R.shapeOut[10]: (1000,)
In[11]: np.minimum.reduce([p, K, R]).shapeOut[11]: (1000,)
In[12]: Vl(p).shapeOut[12]: (1000,)
In[8]: p.shapeOut[8]: (1000,)
In[9]: K.shapeOut[9]: (1000,)
In[10]: R.shapeOut[10]: (1000,)
In[11]: np.minimum.reduce([p, K, R]).shapeOut[11]: (1000,)
In[12]: Vl(p).shapeOut[12]: (1000,)

But integrate.quad is calling Vl with a scalar, an integration variable rangine from 0 to pbar. The nature of the integration is to evaluate Vl at a bunch of points, and sum the values appropriately.

Vl(0) produces this error because it is

In [15]: np.minimum.reduce([0, K, R])    
ValueError: setting an array element with a sequence.

So you need to change Vl to work with a scalar p, or perform your sum directly on the array.

Writing

Vl = lambda x: np.minimum.reduce([x, K, R])

might have clued you into the difference. Vl does not work with x different from the global p. K and R are globals, x is local to the lambda.

Solution 2:

The last line doesn't give the exception because it is fine. You will get the exception, when you try to use Vl with an integer or float instead of an array. The following code runs as expected

x = np.random.randn(K.shape)
res = Vl(x)

with your code. If you want to compare the two arrays with a single number just create an array with only this number as entry, i.e.

five_array = 5*np.ones(K.shape)
res = Vl(five_array)

Answer to the edit: This is a quite strange integration, but if that is what you want I would do it by using the definition of integration, i.e.

x_int = np.linspace(0,pbar,len(K))
integral = Vl(x_int).mean()*pbar

Post a Comment for "Valueerror When Defining A Lambda Function In Python"