Why does the shape of a 1D array not show the number of rows as 1?

Question:

I know that numpy array has a method called shape that returns [No.of rows, No.of columns], and shape[0] gives you the number of rows, shape[1] gives you the number of columns.

a = numpy.array([[1,2,3,4], [2,3,4,5]])
a.shape
>> [2,4]
a.shape[0]
>> 2
a.shape[1]
>> 4

However, if my array only have one row, then it returns [No.of columns, ]. And shape[1] will be out of the index. For example

a = numpy.array([1,2,3,4])
a.shape
>> [4,]
a.shape[0]
>> 4    //this is the number of column
a.shape[1]
>> Error out of index

Now how do I get the number of rows of an numpy array if the array may have only one row?

Thank you

Asked By: Yichuan Wang

||

Answers:

The concept of rows and columns applies when you have a 2D array. However, the array numpy.array([1,2,3,4]) is a 1D array and so has only one dimension, therefore shape rightly returns a single valued iterable.

For a 2D version of the same array, consider the following instead:

>>> a = numpy.array([[1,2,3,4]]) # notice the extra square braces
>>> a.shape
(1, 4)
Answered By: Moses Koledoye

Rather then converting this to a 2d array, which may not be an option every time – one could either check the len() of the tuple returned by shape or just check for an index error as such:

import numpy

a = numpy.array([1,2,3,4])
print(a.shape)
# (4,)
print(a.shape[0])
try:
    print(a.shape[1])
except IndexError:
    print("only 1 column")

Or you could just try and assign this to a variable for later use (or return or what have you) if you know you will only have 1 or 2 dimension shapes:

try:
    shape = (a.shape[0], a.shape[1])
except IndexError:
    shape = (1, a.shape[0])

print(shape)
Answered By: LinkBerest
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.