[Numpy-discussion] Optimize evaluation of function on matrix
Sebastian Berg
sebastian at sipsolutions.net
Sat Mar 25 17:31:12 EDT 2017
On Sat, 2017-03-25 at 18:46 +0100, Florian Lindner wrote:
> Hello,
>
> I have this function:
>
> def eval_BF(self, meshA, meshB):
> """ Evaluates single BF or list of BFs on the meshes. """
> if type(self.basisfunction) is list:
> A = np.empty((len(meshA), len(meshB)))
> for i, row in enumerate(meshA):
> for j, col in enumerate(meshB):
> A[i, j] = self.basisfunction[j](row - col)
> else:
> mgrid = np.meshgrid(meshB, meshA)
> A = self.basisfunction( np.abs(mgrid[0] - mgrid[1]) )
> return A
>
>
> meshA and meshB are 1-dimensional numpy arrays. self.basisfunction is
> e.g.
>
> def Gaussian(radius, shape):
> """ Gaussian Basis Function """
> return np.exp( -np.power(shape*abs(radius), 2))
>
>
> or a list of partial instantations of such functions (from
> functools.partial).
>
> How can I optimize eval_BF? Esp. in the case of basisfunction being a
> list.
>
Are you sure you need to optimize it? If they have a couple of hundred
elements or so for each row, the math is probably the problem and most
of that might be the `exp`.
You can get rid of the `row` loop though in case row if an individual
row is a pretty small array.
To be honest, I am a bit surprised that its a problem, since "basis
function" sounds a bit like you have to do this once and then use the
result many times.
- Sebastian
> Thanks!
> Florian
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20170325/6519338d/attachment.sig>
More information about the NumPy-Discussion
mailing list