Почему форма массива 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)