[Numpy-discussion] Z-ordering (Morton ordering) for numpy

Gamblin, Todd gamblin2 at llnl.gov
Sat Nov 24 15:03:06 EST 2012


Hi all,

In the course of developing a network mapping tool I'm working on, I also developed some python code to do arbitrary-dimensional z-order (morton order) for ndarrays.  The code is here:

	https://github.com/tgamblin/rubik/blob/master/rubik/zorder.py

There is a function to put the elements of an array in Z order, and another one to enumerate an array's elements in Z order.  There is also a ZEncoder class that can generate Z-codes for arbitrary dimensions and bit widths.

I figure this is something that would be generally useful.  Any interest in having this in numpy?  If so, what should the interface look like and can you point me to a good spot in the code to add it?

I was thinking it might make sense to have a Z-order iterator for ndarrays, kind of like ndarray.flat.  i.e.:

	arr = np.empty([4,4], dtype=int)
	arr.flat = range(arr.size)
	for elt in arr.zorder:
		print elt,
	0 4 1 5 8 12 9 13 2 6 3 7 10 14 11 15

Or an equivalent to ndindex:

	arr = np.empty(4,4, dtype=int)
	arr.flat = range(arr.size)
	for ix in np.zindex(arr.shape):
		print ix,
	(0, 0) (1, 0) (0, 1) (1, 1) (2, 0) (3, 0) (2, 1) (3, 1) (0, 2) (1, 2) (0, 3) (1, 3) (2, 2) (3, 2) (2, 3) (3, 3)

Thoughts?

-Todd
______________________________________________________________________
Todd Gamblin, tgamblin at llnl.gov, http://people.llnl.gov/gamblin2
CASC @ Lawrence Livermore National Laboratory, Livermore, CA, USA




More information about the NumPy-Discussion mailing list