Numeric/Numarray equivalent to zip ?

George Sakkis gsakkis at rutgers.edu
Sun May 1 07:59:17 EDT 2005


"Peter Otten" <__peter__ at web.de> wrote:

> George Sakkis wrote:
>
> > What's the fastest and most elegant equivalent of zip() in
> > Numeric/Numarray between two equally sized 1D arrays ? That is, how
to
> > combine two (N,)-shaped arrays to one (N,2) (or (2,N)) shaped ? I
> > expect the fastest and the most elegant idiom to be identical, as
it is
> > usually the case in this excellent library, but if not, both would
be
> > useful to know. Thanks,
>
> >>> import Numeric as nu
> >>> a = nu.array(range(3))
> >>> nu.array([a, a])
> array([[0, 1, 2],
>        [0, 1, 2]])
> >>> nu.transpose(nu.array([a, a]))
> array([[0, 0],
>        [1, 1],
>        [2, 2]])
>
> Or am I missing something? As to speed, it seems to be the fastest to
> write...

Though not the fastest to execute; using concatenate instead of
initializing an array from a list [a,a] is more than 2,5 time faster in
my system (~4.6 vs 11.8 usec per loop according to timeit.py), and it's
not harder either. One difference is that the equivalent expression for
concatenate expects arrays of shape (1,len(a)) instead of 1D arrays os
shape (len(a),):

>>> a = reshape(range(5), (1,5))
>>> a
array([       [0, 1, 2, 3, 4]])
>>> concatenate((a,a))
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])


George




More information about the Python-list mailing list