How to generate (enumerate) 2**N tuples representing all vertices of unit hypercube in N-dimensional hyperspace ?

Paul Rubin http
Tue Jan 3 20:32:38 EST 2006


"Dr. Colombes" <DrColombes at yahoo.com> writes:
> I'm looking for a good Python way to generate (enumerate) the 2**N
> tuples representing all vertices of the unit hypercube in N-dimensional
> hyperspace.
> For example, for N=4 the Python code should generate the following 2**N
> = 16 tuples:

Here's a recursive generator:

def hypercube(ndims):
   if ndims == 0: 
      yield ()
      return
   for h in 1, -1:
      for y in hypercube(ndims-1):
         return (h,)+y


>>> print list(hypercube(4))

[(1, 1, 1, 1), (1, 1, 1, -1), (1, 1, -1, 1), (1, 1, -1, -1), (1, -1,
1, 1), (1, -1, 1, -1), (1, -1, -1, 1), (1, -1, -1, -1), (-1, 1, 1, 1),
(-1, 1, 1, -1), (-1, 1, -1, 1), (-1, 1, -1, -1), (-1, -1, 1, 1), (-1,
-1, 1, -1), (-1, -1, -1, 1), (-1, -1, -1, -1)]
>>> 

> Maybe converting each integer in the range(2**N) to binary, then
> converting to bit string, then applying the "tuple" function to each
> bit string?  

Yeah you could do that too.



More information about the Python-list mailing list