получить " 1 " для одномерного numpy.массив, использующий функцию shape-like

в функции я даю массив Numpy: он может быть многопозиционным, но также и однопозиционным

поэтому, когда я даю многопозиционный массив:

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

и

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

хорошо.

но когда я спрашиваю форме

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

и

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

Ooops, кортеж содержит только один элемент... пока я хочу 1 чтобы указать, что это одномерный массив. Есть ли способ получить это ? Я имею в виду с простым функция или метод, и без дискриминантного теста с ndim например ?

спасибо !

2 ответов


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

Если вам нужен вектор столбца, вы можете использовать .reshape метод - в самом деле, .shape на самом деле является настраиваемым свойством, поэтому numpy также позволяет вам сделать это:

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

хм, нет способа установить значение по умолчанию для доступа к элементу списка, но вы можете попробовать:

>>> shape = np.array([1,2,3,4]).shape
>>> shape[1] if shape[1:] else 1
1

HTH.