[Numpy-discussion] Stacking arrays along new dimension in front
Tue Jul 20 09:34:36 CDT 2010
On Tue, Jul 20, 2010 at 7:24 AM, Skipper Seabold <email@example.com> wrote:
> On Tue, Jul 20, 2010 at 5:11 AM, Gael Varoquaux
> <firstname.lastname@example.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
>> 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