[Numpy-discussion] 2-D function and meshgrid

Charles R Harris charlesr.harris@gmail....
Fri Jan 9 14:37:50 CST 2009


On Fri, Jan 9, 2009 at 11:45 AM, Paulo J. S. Silva <pjssilva@ime.usp.br>wrote:

> Hello,
>
> I have a function that receives a array of shape (2,) and returns a
> number (a function from R^2 -> R). It basically looks like this:
>
>    def weirdDistance2(x):
>       return dot(dot(weirdMatrix, x), x)
>
> (weirdMatrix is a "global" (2,2) array)
>
> I want to see its level sets in the box [0, 1] x [0, 1], hence I have to
> create a meshgrid and then compute it at each point of the mesh:
>
>    x = linspace(0, 1, 200)
>    y = x.copy()
>    X, Y = meshgrid(x, y)
>
> My problem is how to actually compute the function at each point of the
> mesh. I have come out with two solutions. One very short and clear, but
> slow, and another longer and more convoluted (it has a loop, I hate
> loops in numpy code), but faster. Does anyone know a "no explicit-loops"
> and fast solution?
>
> Solution1:
>
>    def myDistance(a, b):
>        return weirdDistance(np.array((a, b)))
>    vecDistance = np.vectorize(myDistance)
>    return vecDistance(X, Y)
>
> Solution 2:
>
>    nPoints = X.size
>    result = np.zeros(nPoints)
>    points = np.array( [X.ravel(), Y.ravel()] ).T
>    for i in xrange(nPoints):
>        result[i] = weirdDistance(points[i])
>    result = result.reshape(X.shape)
>
> Of course, the first one is slow because the myDistance function creates
> an array at each call. The second one, even with a loop, avoids the
> array creations.
>

Try

IDLE 1.2.4
>>> import numpy as np
>>> pts = np.random.rand(5,2)
>>> mat = np.random.rand(2,2)
>>> res = (np.dot(pts,mat)*pts).sum(axis=1)
>>> res

array([ 0.63018561,  0.30829864,  0.23173343,  1.79972127,  0.69498856])
>>> for row in pts : np.dot(row,np.dot(mat,row))

0.63018560596590589
0.30829864146737423
0.23173343333294744
1.7997212735553192
0.69498855520540959

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20090109/2c4925d9/attachment.html 


More information about the Numpy-discussion mailing list