Let's say we have a particularly simple function like
import scipy as sp
def func(x, y):
return x + y
This function evidently works for several builtin python datatypes of x
and y
like string, list, int, float, array, etc. Since we are particularly interested in arrays, we consider two arrays:
x = sp.array([-2, -1, 0, 1, 2])
y = sp.array([-2, -1, 0, 1, 2])
xx = x[:, sp.newaxis]
yy = y[sp.newaxis, :]
>>> func(xx, yy)
this returns
array([[-4, -3, -2, -1, 0],
[-3, -2, -1, 0, 1],
[-2, -1, 0, 1, 2],
[-1, 0, 1, 2, 3],
[ 0, 1, 2, 3, 4]])
just as we would expect.
Now what if one wants to throw in arrays as the inputs for the following function?
def func2(x, y):
if x > y:
return x + y
else:
return x - y
doing >>>func(xx, yy)
would raise an error.
The first obvious method that one would come up with is the sp.vectorize
function in scipy/numpy. This method, nevertheless has been proved to be not very efficient. Can anyone think of a more robust way of broadcasting any function in general on to numpy arrays?
If re-writing the code in an array-friendly fashion is the only way, it would help if you could mention it here too.