get "1" for a one-dimensional numpy.array using a shape-like function

Covich picture Covich · Mar 31, 2014 · Viewed 8.8k times · Source

In a function, I give a Numpy array : It can be multi-dimentional but also one-dimentional

So when I give a multi-dimentional array :

np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]).shape
>>> (3, 4)

and

np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]).shape[1]
>>> 4

Fine.

But when I ask the shape of

np.array([1,2,3,4]).shape
>>> (4,)

and

np.array([1,2,3,4]).shape[1]
>>> IndexError: tuple index out of range

Ooops, the tuple contain only one element... while I want 1 to indicate it is a one-dimentional array. Is there a way to get this ? I mean with a simple function or method, and without a discriminant test with ndim for exemple ?

Thanks !

Answer

wim picture wim · Mar 31, 2014
>>> a
array([1, 2, 3, 4])
>>> a.ndim
1
>>> b = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
>>> b.ndim
2

If you wanted a column vector, you can use the .reshape method - in fact, .shape is actually a settable property so numpy also lets you do this:

>>> a
array([1, 2, 3, 4])
>>> a.shape += (1,)
>>> a
array([[1],
       [2],
       [3],
       [4]])
>>> a.shape
(4, 1)
>>> a.ndim
2