Todd,<div><br></div><div>I am optimistic and I think it would be a good idea to put this in.  A couple previous studies [1] haven't found any useful speedups from in-core applications for Morton-order, and if you have results for real scientific applications using numpy this would not only be great, but the resulting paper would have quite a bit of impact.  I'm sure you're already connected to the right people at LLNL, but I can think of a couple other projects which might be interested in trying this sort of thing out.</div>
<div><br></div><div><a href="http://www.cs.utexas.edu/~pingali/CS395T/2012sp/papers/co.pdf">http://www.cs.utexas.edu/~pingali/CS395T/2012sp/papers/co.pdf</a><br></div><div><br></div><div>Cheers,</div><div>Aron</div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Sat, Nov 24, 2012 at 8:10 PM, Travis Oliphant <span dir="ltr"><<a href="mailto:travis@continuum.io" target="_blank">travis@continuum.io</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This is pretty cool.    Something like this would be interesting to play with.  There are some algorithms that are faster with z-order arrays.    The code is simple enough and small enough that I could see putting it in NumPy.   What do others think?<br>

<span class="HOEnZb"><font color="#888888"><br>
-Travis<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On Nov 24, 2012, at 1:03 PM, Gamblin, Todd wrote:<br>
<br>
> Hi all,<br>
><br>
> 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:<br>
><br>
>       <a href="https://github.com/tgamblin/rubik/blob/master/rubik/zorder.py" target="_blank">https://github.com/tgamblin/rubik/blob/master/rubik/zorder.py</a><br>
><br>
> 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.<br>

><br>
> 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?<br>
><br>
> I was thinking it might make sense to have a Z-order iterator for ndarrays, kind of like ndarray.flat.  i.e.:<br>
><br>
>       arr = np.empty([4,4], dtype=int)<br>
>       arr.flat = range(arr.size)<br>
>       for elt in arr.zorder:<br>
>               print elt,<br>
>       0 4 1 5 8 12 9 13 2 6 3 7 10 14 11 15<br>
><br>
> Or an equivalent to ndindex:<br>
><br>
>       arr = np.empty(4,4, dtype=int)<br>
>       arr.flat = range(arr.size)<br>
>       for ix in np.zindex(arr.shape):<br>
>               print ix,<br>
>       (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)<br>
><br>
> Thoughts?<br>
><br>
> -Todd<br>
> ______________________________________________________________________<br>
> Todd Gamblin, <a href="mailto:tgamblin@llnl.gov">tgamblin@llnl.gov</a>, <a href="http://people.llnl.gov/gamblin2" target="_blank">http://people.llnl.gov/gamblin2</a><br>
> CASC @ Lawrence Livermore National Laboratory, Livermore, CA, USA<br>
><br>
> _______________________________________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
> <a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
</div></div></blockquote></div><br></div>