Concatenating Arrays

Question

How do you concatenate Numeric arrays? Can you concatenate along "extra" dimensions like you can in IDL?

Answer

The answer to both questions is "yes"! Concatenation is done using the Numeric function concatenate. For instance, to concatenate one 1-D vector with another 1-D vector:

>>> a = Numeric.array([1, 2, -6, 4, -8])
>>> b = Numeric.concatenate([a,a])
>>> b
array([ 1, 2, -6, 4, -8, 1, 2, -6, 4, -8])

But let's say you want to concatenate in "extra" dimensions. (In IDL this is done using brackets.) For instance, let's say you want array c to be a 2-D array, where each row is a duplicate of vector a. You could predeclare c (using Numeric.array), but this won't work if the size of c isn't known until run-time. An alternate method is to first use Numeric.reshape to "inflate" the dimensions of a to create an "extra" dimension, then to use Numeric.concatenate (with the axis keyword set to the "extra" dimensions) to finish the job. Thus:

>>> a = Numeric.array([1, 2, -6, 4, -8])
>>> a.shape
(5,)
>>> a = Numeric.reshape(a,(a.shape[0],1))
>>> a.shape
(5, 1)
>>> c = Numeric.concatenate([a,a], axis=1)

We can see from analyzing c (as a whole and in parts) that c is what we're looking for:

>>> c
array([[ 1, 1],
       [ 2, 2],
       [-6, -6],
       [ 4, 4],
       [-8, -8]])
>>> c[:,1]
array([ 1, 2, -6, 4, -8])
>>> c[3,:]
array([4, 4])

Notes: The idea of using array rank "inflation" comes from J. D. Smith's amazing Dimensional Juggling Tutorial for the IDL language.

Return to the Tips and Examples index page.

Updated: November 10, 2003 by Johnny Lin <email address>. License.