Почему форма массива 1D не показывает количество строк как 1?

Я знаю, что массив numpy имеет метод, называемый формой, который возвращает [Число строк, Число столбцов], а форма [0] дает вам количество строк, shape [1] дает вам количество столбцов.

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

Однако, если мой массив имеет только одну строку, он возвращает [Число столбцов]. И форма [1] будет вне индекса. Например

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

Теперь, как получить количество строк массива numpy, если массив может иметь только одну строку?

Спасибо

Ответы

Ответ 1

Понятие строк и столбцов применяется, когда у вас есть 2D-массив. Тем не менее, массив numpy.array([1,2,3,4]) является 1D-массивом и поэтому имеет только одно измерение, поэтому shape справедливо возвращает один значный итерабельный.

Для двумерной версии того же массива рассмотрим следующее:

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

Ответ 2

Вместо этого преобразование этого в 2d-массив, который может не быть вариантом каждый раз - можно либо проверить len() кортежа, возвращаемого формой, либо просто проверить индексную ошибку как таковую:

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")

Или вы можете просто попытаться присвоить это переменной для последующего использования (или возврата или того, что у вас есть), если вы знаете, что у вас будет только 1 или 2 размерных фигуры:

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

print(shape)