[Numpy-discussion] Vectorizing a function
Gael Varoquaux
gael.varoquaux@normalesup....
Wed Jan 30 03:22:15 CST 2008
On Wed, Jan 30, 2008 at 12:49:44AM -0800, LB wrote:
> My problem is that the complexe calculations made in calc_0d use some
> parameters, which are currently defined at the head of my python file.
> This is not very nice and I can't define a module containing theses
> two functions and call them with different parameters.
> I would like to make this cleaner and pass theses parameter as
> keyword argument, but this don't seems to be possible with vectorize.
> Indeed, some of theses parameters are array parameters and only the x
> and y arguments should be interpreted with the broadcasting rules....
> What is the "good way" for doing this ?
I don't know what the "good way" is, but you can always use functional
programming style (Oh, no, CaML is getting on me !):
def calc_0d_params(param1, param2, param3):
def calc_0d(x, y):
# Here your code making use of param1, param2, param3)
...
return calc_0d(x, y)
you call the function like this:
calc_0d_params(param1, param2, param3)(x, y)
To vectorize it you can do:
calc_0d_vect = lambda *params: vectorize(calc_0d_params(*params))
This is untested code, but I hope you get the idea. It all about partial
evaluation of arguments. By the way, the parameters can now be keyword
arguments.
HTH,
Gaël
More information about the Numpy-discussion
mailing list