Aashish sharma Sharma
Aashish sharma Sharma

Reputation: 307

Issue with numpy.concatenation

I have defined 2 numpy array 2,3 and horizontally concatenate them

a=numpy.array([[1,2,3],[4,5,6]])
b=numpy.array([[7,8,9],[10,11,12]])
C=numpy.concatenate((a,b),axis=0)

c becomes 4,3 matrix Now I tried same thing with 1,3 list as

a=numpy.array([1,2,3])
b=numpy.array([4,5,6])
c=numpy.concatenate((a,b),axis=0)

Now I was expecting 2,3 matrix but instead I have 1,6. I understand that vstack etc will work but I am curious as to why this is happening? And what I am doing wrong with numpy.concatenate?

Thanks for the reply. I can get the result as suggested by having 1,3 array and then concatenation. But logic is I have to add rows to an empty matrix at each iteration. I tried append as Suggested:

testing=[]
for i in range(3):
   testing=testing.append([1,2,3])

It gave error testing doesnot have attribute append as its of None Type. Further If I use logic of 1,3 array using np.array([[1,2,3]]) how can i do this inside for loop?

Upvotes: 2

Views: 8631

Answers (2)

Kasravnd
Kasravnd

Reputation: 107357

You didn't do anything wrong. numpy.concatenate join a sequence of arrays together.which means it create an integrated array from the current array's element which in a 2D array the elements are nested lists and in a 1D array the elements are variables.

So this is not the concatenate's job, as you said you can use np.vstack :

>>> c=numpy.vstack((a,b))
>>> c
array([[1, 2, 3],
       [4, 5, 6]])

Also in your code list.append appends and element in-place to a list you can not assign it to a variable.instead you can just append to testing in each iteration.

testing=[]
for i in range(3):
   testing.append([1,2,3])

also as a more efficient way you can create that list using a list comprehension list following :

testing=[[1,2,3] for _ in xrange(3)]

Upvotes: 2

Akavall
Akavall

Reputation: 86366

This is happening because you are concatenating along axis=0.

In your first example:

a=numpy.array([[1,2,3],[4,5,6]])     # 2 elements in 0th dimension 
b=numpy.array([[7,8,9],[10,11,12]])  # 2 elements in 0th dimension
C=numpy.concatenate((a,b),axis=0)    # 4 elements in 0th dimension 

In your second example:

a=numpy.array([1,2,3])               # 3 elements in 0th dimension
b=numpy.array([4,5,6])               # 3 elements in 0th dimension     
c=numpy.concatenate((a,b),axis=0)    # 6 elements in 0th dimension

Edit:

Note that in your second example, you only have one dimensional array.

In [35]: a=numpy.array([1,2,3])

In [36]: a.shape
Out[36]: (3,)

If the shape of the arrays was (1,3) you would get your expected result:

In [43]: a2=numpy.array([[1,2,3]])

In [44]: b2=numpy.array([[4,5,6]])

In [45]: numpy.concatenate((a2,b2), axis=0)
Out[45]: 
array([[1, 2, 3],
       [4, 5, 6]])

Upvotes: 1

Related Questions