Concatenation of 2 1D `numpy` Arrays Along 2nd Axis
Solution 1
Your title explains it - a 1d array does not have a 2nd axis!
But having said that, on my system as on @Oliver W.
s, it does not produce an error
In [655]: np.concatenate((t1,t2),axis=1)
Out[655]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
This is the result I would have expected from axis=0
:
In [656]: np.concatenate((t1,t2),axis=0)
Out[656]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
It looks like concatenate
ignores the axis
parameter when the arrays are 1d. I don't know if this is something new in my 1.9 version, or something old.
For more control consider using the vstack
and hstack
wrappers that expand array dimensions if needed:
In [657]: np.hstack((t1,t2))
Out[657]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
In [658]: np.vstack((t1,t2))
Out[658]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[11, 12, 13, 14, 15, 16, 17, 18, 19]])
Solution 2
This is because of Numpy's way of representing 1D arrays. The following using reshape() will work:
t3 = np.concatenate((t1.reshape(-1,1),t2.reshape(-1,1),axis=1)
Explanation: This is the shape of the 1D array when initially created:
t1 = np.arange(1,10)
t1.shape
>>(9,)
'np.concatenate' and many other functions don't like the missing dimension. Reshape does the following:
t1.reshape(-1,1).shape
>>(9,1)
Solution 3
If you need an array with two columns you can use column_stack:
import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)
np.column_stack((t1,t2))
Which results
[[ 1 11]
[ 2 12]
[ 3 13]
[ 4 14]
[ 5 15]
[ 6 16]
[ 7 17]
[ 8 18]
[ 9 19]]
Solution 4
You better use a different function of Numpy called numpy.stack
.
It behaves like MATLAB's cat
.
The numpy.stack
function doesn't require the arrays to have the dimension they are concatenated along.
Related videos on Youtube
ricky_hehe
Updated on July 09, 2022Comments
-
ricky_hehe almost 2 years
Executing
import numpy as np t1 = np.arange(1,10) t2 = np.arange(11,20) t3 = np.concatenate((t1,t2),axis=1)
results in a
Traceback (most recent call last): File "<ipython-input-264-85078aa26398>", line 1, in <module> t3 = np.concatenate((t1,t2),axis=1) IndexError: axis 1 out of bounds [0, 1)
why does it report that axis 1 is out of bounds?