Атрибуты массива: shape, size, dtype, ndim

Атрибуты массива: shape, size, dtype, ndim NumPy

Привет! Ты уже научился создавать массивы в NumPy. Теперь пришло время узнать, как получить информацию о массиве: его размер, форму, тип данных.

В этой статье мы разберём:

  • shape — размерность массива
  • size — количество элементов
  • dtype — тип данных
  • ndim — количество измерений

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный NumPy
  • Базовое понимание массивов

Совет: Атрибуты массива — это первое, что нужно проверить при работе с данными.

Основная часть

shape — размерность массива

shape возвращает кортеж с размерами массива по каждому измерению.

import numpy as np

# Одномерный массив
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1.shape)   # (5,)

# Двумерный массив
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2.shape)   # (2, 3)

# Трёхмерный массив
arr3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(arr3.shape)   # (2, 2, 2)

Совет: Количество элементов в кортеже shape равно ndim (количеству измерений).

 size — количество элементов

size возвращает общее количество элементов в массиве.

arr1 = np.array([1, 2, 3, 4, 5])
print(arr1.size)   # 5

arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2.size)   # 6 (2 * 3)

arr3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(arr3.size)   # 8 (2 * 2 * 2)

Совет: size равно произведению всех элементов в shape.

dtype — тип данных элементов

dtype показывает тип данных элементов в массиве.

arr_int = np.array([1, 2, 3])
print(arr_int.dtype)   # int64 (или int32 в зависимости от системы)

arr_float = np.array([1.5, 2.3, 3.7])
print(arr_float.dtype) # float64

arr_bool = np.array([True, False, True])
print(arr_bool.dtype)  # bool

arr_str = np.array(['a', 'b', 'c'])
print(arr_str.dtype)   # <U1 (строка из 1 символа)

Совет: Можно указать тип при создании:

arr = np.array([1, 2, 3], dtype=np.float32)
print(arr.dtype)   # float32

ndim — количество измерений

ndim возвращает количество измерений массива.

arr1 = np.array([1, 2, 3])
print(arr1.ndim)   # 1

arr2 = np.array([[1, 2], [3, 4]])
print(arr2.ndim)   # 2

arr3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

Совет: ndim равно длине кортежа shape.

Сравнение атрибутов

АтрибутЧто показываетПример для (2, 3)
shapeРазмерность(2, 3)
sizeКоличество элементов6
ndimЧисло измерений2
dtypeТип данныхint64
arr = np.array([[1, 2, 3], [4, 5, 6]])

print("shape:", arr.shape)   # (2, 3)
print("size:", arr.size)     # 6
print("ndim:", arr.ndim)     # 2
print("dtype:", arr.dtype)   # int64

Изменение формы массива

shape можно изменить с помощью reshape().

arr = np.array([1, 2, 3, 4, 5, 6])
print(arr.shape)   # (6,)

# Превращаем в матрицу 2x3
reshaped = arr.reshape(2, 3)
print(reshaped)
# [[1 2 3]
#  [4 5 6]]

print(reshaped.shape)   # (2, 3)

# Можно в 3x2
reshaped2 = arr.reshape(3, 2)
print(reshaped2)
# [[1 2]
#  [3 4]
#  [5 6]]

Важно: reshape() не меняет исходный массив, а возвращает новый. Общее количество элементов должно совпадать.

Изменение типа данных

dtype можно изменить с помощью astype().

arr = np.array([1, 2, 3])
print(arr.dtype)      # int64

arr_float = arr.astype(float)
print(arr_float)      # [1. 2. 3.]
print(arr_float.dtype) # float64

arr_bool = arr.astype(bool)
print(arr_bool)       # [ True  True  True]

Совет: astype() создаёт новый массив с указанным типом данных.

Полный пример

import numpy as np

# Создаём массив
arr = np.array([[1, 2, 3], [4, 5, 6]])

print("Исходный массив:")
print(arr)

print("\nАтрибуты:")
print(f"shape: {arr.shape}")   # (2, 3)
print(f"size: {arr.size}")     # 6
print(f"ndim: {arr.ndim}")     # 2
print(f"dtype: {arr.dtype}")   # int64

print("\nИзменение формы:")
reshaped = arr.reshape(3, 2)
print(reshaped)

print("\nИзменение типа:")
float_arr = arr.astype(float)
print(float_arr)

Результат:

Исходный массив:
[[1 2 3]
 [4 5 6]]

Атрибуты:
shape: (2, 3)
size: 6
ndim: 2
dtype: int64

Изменение формы:
[[1 2]
 [3 4]
 [5 6]]

Изменение типа:
[[1. 2. 3.]
 [4. 5. 6.]]

Задачи для закрепления

Задача 1. Создай массив 3×4 и выведи его shapesizendim.

Задача 2. Создай одномерный массив из 10 элементов и измени его форму на 2×5.

Задача 3. Создай массив целых чисел и преобразуй его в тип float.

Задача 4. Что вернёт shape для одномерного массива?

Задача 5. Как проверить тип данных элементов массива?

Ответы:

Задача 1.

import numpy as np
arr = np.zeros((3, 4))
print("shape:", arr.shape)   # (3, 4)
print("size:", arr.size)     # 12
print("ndim:", arr.ndim)     # 2

Задача 2.

arr = np.arange(10)
print(arr.shape)   # (10,)
reshaped = arr.reshape(2, 5)
print(reshaped)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]

Задача 3.

arr = np.array([1, 2, 3, 4])
float_arr = arr.astype(float)
print(float_arr)   # [1. 2. 3. 4.]

Задача 4.

# shape возвращает (n,), где n — количество элементов.

Задача 5.

# С помощью атрибута dtype: arr.dtype

Нюансы и подводные камни

shape возвращает кортеж

Даже для одномерного массива shape — это кортеж.

arr = np.array([1, 2, 3])
print(type(arr.shape))   # <class 'tuple'>

reshape требует совпадения размеров

Общее количество элементов должно совпадать.

arr = np.arange(6)
# arr.reshape(2, 4)   # Ошибка! 6 != 8
arr.reshape(2, 3)   # OK

astype создаёт новый массив

astype() не изменяет исходный массив.

arr = np.array([1, 2, 3])
arr.astype(float)
print(arr.dtype)   # int64 (не изменился)

arr = arr.astype(float)  # Сохраняем результат
print(arr.dtype)   # float64

Шпаргалка

АтрибутНазначениеПример
shapeРазмерность(3, 4)
sizeКоличество элементов12
ndimКоличество измерений2
dtypeТип данныхint64
reshape()Изменение формыarr.reshape(2, 6)
astype()Изменение типаarr.astype(float)

Заключение

Сегодня мы:

  • Изучили атрибуты shapesizedtypendim
  • Научились получать информацию о массиве
  • Изменять форму и тип данных
  • Практические примеры

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×