generating points on a grid - efficiently

Thomas Heller theller at python.net
Mon Mar 8 04:46:30 EST 2004


Rajarshi Guha <rajarshi at presidency.com> writes:

> Hi, 
>  I've written some code that takes a N lists of numbers (corresponding to
> axes) and generates a list of grid points (N dimensional grid) for the
> supplied axes. So as an example say my two axes are defined as
>
> v1 = [1,2,3]
> v2 = [1,2,3]
>
> My code will return to me a list of points: 
>
> (1,1), (1,2), (1,3) ....(3,1), (3,2), (3,3)
>
> and so on. For 3 axes, I would obtain 27 points and so on.
> I've included the code below.
[...]
> It seems that this could be formulated as a recursive problem but I
> can't seem to get at it.

Here is a recursive solution using generators:

from __future__ import generators

def _gen_grid(v):
    rest = v[1:]
    if rest:
        for a in v[0]:
            for b in gen_grid(rest):
                yield [a] + b
    else:
        for a in v[0]:
            yield [a]

def gen_grid(v):
    return [x for x in _gen_grid(v)]



v1 = [1, 2]
v2 = [3, 4]
v3 = [5, 6]

print gen_grid((v1, v2, v3))

Thomas





More information about the Python-list mailing list