Нашли ошибку?
базовыйNumPy 2.5.3

Атрибуты массива

Форма, число измерений, размер, тип элементов и занимаемая память — то, что первым делом смотрят у незнакомого массива.

Нужно знать:Создание массивов

Содержание статьи

Коротко

  • shape — кортеж длин по осям: (3, 4) — 3 строки, 4 столбца.
  • ndim — число осей (len(shape)), size — всего элементов (произведение shape).
  • dtype — тип элементов, itemsize — байт на элемент, nbytes — байт на данные (size * itemsize).
  • len(a) — длина только первой оси.
  • Это атрибуты, а не методы: a.shape, без скобок.

Синтаксис

a.shape      # (3, 4)
a.ndim       # 2
a.size       # 12
a.dtype      # dtype('int64')
a.itemsize   # 8 — байт на элемент
a.nbytes     # 96 — байт на все элементы
len(a)       # 3 — длина первой оси

Примеры

Все атрибуты сразу
sales = np.array([[120, 80, 45, 60],
                  [100, 95, 50, 70],
                  [130, 85, 40, 65]])   # 3 магазина × 4 товара
print("shape:", sales.shape)
print("ndim:", sales.ndim)
print("size:", sales.size)
print("dtype:", sales.dtype)
print("len:", len(sales))
Вывод
shape: (3, 4)
ndim: 2
size: 12
dtype: int64
len: 3
Память: float64 и float32
prices64 = np.zeros(1000)
prices32 = np.zeros(1000, dtype=np.float32)
print(prices64.itemsize, prices64.nbytes)
print(prices32.itemsize, prices32.nbytes)
Вывод
8 8000
4 4000
Трёхмерный массив
week = np.zeros((7, 24, 3))   # дни × часы × датчики
week.shape, week.ndim, week.size
Вывод
((7, 24, 3), 3, 504)

Подводные камни

(3,), (3, 1) и (1, 3) — три разные формы

Одномерный вектор, столбец и строка содержат одни и те же три числа, но ведут себя по-разному в транслировании и матричном умножении.

Одни данные, разные формы
v = np.array([1, 2, 3])
print(v.shape, v.reshape(3, 1).shape, v.reshape(1, 3).shape)
Вывод
(3,) (3, 1) (1, 3)

У нульмерного массива нет длины

np.array(5) — массив с shape == (): одно значение без осей. len для него падает; число элементов даёт size.

len для 0-мерного массиваошибка: TypeError
x = np.array(5)
print(x.shape, x.ndim)
len(x)
Ошибка
() 0
TypeError: len() of unsized object