Hey, I've timed the two versions, one basisfunction being a function:
1 loop, best of 3: 17.3 s per loop the other one, basisfunction being a list of functions: 1 loop, best of 3: 33.5 s per loop > 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. It's part of a radial basis function interpolation algorithm. Yes, in practice the matrix is filled only once and reused a couple of times, but in my case, which is exploration of parameters for the algorithm, I call eval_BF many times. > You can get rid of the `row` loop though in case row if an individual > row is a pretty small array. Would you elaborate on that? Do you mean that the inner col loop produces an array which is then assigned to the row. But I think it stell need to row loop there. Best, Florian Am 25.03.2017 um 22:31 schrieb Sebastian Berg: > 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@python.org >> https://mail.python.org/mailman/listinfo/numpy-discussion >> >> >> _______________________________________________ >> NumPy-Discussion mailing list >> NumPy-Discussion@python.org >> https://mail.python.org/mailman/listinfo/numpy-discussion
signature.asc
Description: OpenPGP digital signature
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion