[Numpy-discussion] Stacking arrays along new dimension in front

Keith Goodman kwgoodman at gmail.com
Tue Jul 20 10:34:36 EDT 2010


On Tue, Jul 20, 2010 at 7:24 AM, Skipper Seabold <jsseabold at gmail.com> wrote:
> On Tue, Jul 20, 2010 at 5:11 AM, Gael Varoquaux
> <gael.varoquaux at normalesup.org> wrote:
>> Is there in numpy a function that does:
>>
>>    np.concatenate([a_[np.newaxis] for a_ in a])
>>
>> ?
>>
>> ie: add a dimension in front and stack along this dimension, just like
>>
>>    np.array(a)
>>
>> would do, but more efficient.
>>
>> This is something that do all the time. Am I the only one?
>>
>
> Will one of the stack functions do?  I take it your a looks something like
>
> a = [np.arange(1000), np.arange(1000), np.arange(1000)]
>
> np.all(np.vstack(a) == np.concatenate([a_[None] for a_ in a]))
> # True
>
> It's about the same speed-wise as concatenate, but it's more terse and
> faster than np.array if you already have a list of arrays.

Stacking seems to add some overhead. A reshape is needed if the arrays
in the list are more than 1d.

>> a = [np.array([[1, 2], [3, 4]]), np.array([[5, 6], [7, 8]])]
>> timeit np.array(a)
100000 loops, best of 3: 6.76 us per loop
>> timeit np.concatenate([a_[np.newaxis] for a_ in a])
100000 loops, best of 3: 4.17 us per loop
>> timeit np.vstack(a).reshape(2,2,2)
100000 loops, best of 3: 5.91 us per loop



More information about the NumPy-Discussion mailing list