"Peter Otten" <[EMAIL PROTECTED]> 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

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to