Lisa
Lisa

Reputation: 11

What's the difference between shape(150,) and shape (150,1)?

What's the difference between shape(150,) and shape (150,1)?

I think they are the same, I mean they both represent a column vector.

Upvotes: 1

Views: 787

Answers (3)

hpaulj
hpaulj

Reputation: 231365

Questions like this see to come from two misconceptions.

  • not realizing that (5,) is a 1 element tuple.
  • expecting MATLAB like matrices

Make an array with the handy arange function:

In [424]: x = np.arange(5)                                                      
In [425]: x.shape                                                               
Out[425]: (5,)             # 1 element tuple
In [426]: x.ndim                                                                
Out[426]: 1

numpy does not automatically make matrices, 2d arrays. It does not follow MATLAB in that regard.

We can reshape that array, adding a 2nd dimension. The result is a view (sooner or later you need to learn what that means):

In [427]: y = x.reshape(5,1)                                                    
In [428]: y.shape                                                               
Out[428]: (5, 1)
In [429]: y.ndim                                                                
Out[429]: 2

The display of these 2 arrays is very different. Same numbers, but the layout and number of brackets is very different, reflecting the respective shapes:

In [430]: x                                                                     
Out[430]: array([0, 1, 2, 3, 4])
In [431]: y                                                                     
Out[431]: 
array([[0],
       [1],
       [2],
       [3],
       [4]])

The shape difference may seem academic - until you try to do math with the arrays:

In [432]: x+x                                                                   
Out[432]: array([0, 2, 4, 6, 8])     # element wise sum
In [433]: x+y                                                                   
Out[433]: 
array([[0, 1, 2, 3, 4],
       [1, 2, 3, 4, 5],
       [2, 3, 4, 5, 6],
       [3, 4, 5, 6, 7],
       [4, 5, 6, 7, 8]])

How did that end up producing a (5,5) array? Broadcasting a (5,) array with a (5,1) array!

Upvotes: 0

kmario23
kmario23

Reputation: 61325

Although they both occupy same space and positions in memory,

I think they are the same, I mean they both represent a column vector.

No they are not and certainly not according to NumPy (ndarrays).

The main difference is that the

shape (150,) => is a 1D array, whereas
shape (150,1) => is a 2D array

Upvotes: 0

Angelo
Angelo

Reputation: 655

Both have the same values, but one is a vector and the other one is a matrix of the vector. Here's an example:

import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([[1], [2], [3], [4], [5]])
print(x.shape)
print(y.shape)

And the output is:

(5,)
(5, 1)

Upvotes: 3

Related Questions