Определение размерностей массива с помощью numpy в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы определить размер каждого измерения (или оси) в массиве NumPy, воспользуйтесь атрибутом .shape. Этот атрибут возвращает кортеж, отображающий размерности массива:

Python
Скопировать код
import numpy as np

my_array = np.array([[1, 2, 3], [4, 5, 6]])
print(my_array.shape)  # Вывод: (2, 3)

Здесь (2, 3) сообщает нам, что массив состоит из 2 строк и 3 столбцов, представляя собой контейнер, аналогичный прямоугольной коробке конфет.

Кинга Идем в IT: пошаговый план для смены профессии

Разбор свойства .shape

Что такое .shape

Атрибут .shape представляет собой кортеж целых чисел, где каждое число отражает размер соответствующего измерения (оси) в массиве NumPy. Длина этого кортежа указывает на ранг массива.

Python
Скопировать код
weird_array = np.array([[[1], [2], [3]], [[4], [5], [6]]])
print(weird_array.shape)  # Вывод: (2, 3, 1)

Индексация размерностей

Доступ к различным размерностям массива можно получить через индексы кортежа shape:

Python
Скопировать код
print(my_array.shape[0])  # Количество строк
print(my_array.shape[1])  # Количество столбцов

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

Если вам нужно узнать число измерений массива, используйте атрибут .ndim:

Python
Скопировать код
print(weird_array.ndim)  # Вывод: 3

Важность понимания формы массива

Форма при выполнении операций

Понимание формы массива является важным при выполнении различных операций, например, трансляции, что позволяет избежать ошибок, вызванных несоответствием размерностей.

Python
Скопировать код
candy_1 = np.array([1, 2, 3])
candy_2 = np.array([[4], [5], [6]])
print((candy_1 + candy_2).shape)  # Трансляция массивов (3,) и (3,1)

Изменение формы массивов для преобразования данных

Метод .reshape позволяет изменить форму массива без влияния на его данные. Это очень полезно при подготовке данных для анализа или обучения моделей машинного обучения.

Python
Скопировать код
reshaped_sweets = my_array.reshape((3, 2))
print(reshaped_sweets.shape)  # Вывод: (3, 2)

Итерация по многомерным массивам

Используя вложенные циклы для прохода по элементам массивов, знание размерности помогает избежать ошибок IndexError и обеспечивает более эффективную обработку данных.

Python
Скопировать код
for i in range(my_array.shape[0]):
    for j in range(my_array.shape[1]):
        print(f"Конфета номер {my_array[i, j]}", end=' ')
    print()

Визуализация

Попробуйте представить размерности массивов NumPy на примерах ниже:

1D массив ([🍊, 🍊, 🍊]): Линейное расположение апельсинов.

Python
Скопировать код
# Воспринимайте это как лоток с апельсинами
np.array([🍊, 🍊, 🍊])

2D массив ([[🍊, 🍊], [🍊, 🍊]]): Несколько слоев коробок, расположенных друг на друге в упорядоченном порядке.

Python
Скопировать код
# Воспринимайте это как ящики на складе,
# где каждый ящик представляет собой отдельный слой
np.array([[🍊, 🍊], [🍊, 🍊]])

3D массив ([[[🍊], [🍊]], [[🍊], [🍊]]]): Полки с множеством упорядоченно расположенных коробок, формирующие трехмерное пространство.

Python
Скопировать код
# Воспринимайте это как стеллажи на складе с ящиками апельсинов
np.array([[[🍊], [🍊]], [[🍊], [🍊]]])

Эффективные способы изменения формы массивов

Преобразование к одномерному виду

Массив можно превратить в одномерный при помощи методов .flatten() или .ravel(). Это приходится по вкусу функциям, которым требуются одномерные массивы.

Python
Скопировать код
flat_candies = weird_array.flatten()
print(flat_candies.shape)  # Вывод: (6,)

Увеличение размерности

Чтобы добавить дополнительные оси (измерения), используйте np.newaxis или .reshape. Это может быть актуально, например, при работе со сверточными нейронными сетями.

Python
Скопировать код
pumped_candies = candy_1[:, np.newaxis]
print(pumped_candies.shape)  # Вывод: (3, 1)

Срезы и индексация

Форма массива может быть изменена благодаря использованию срезов и продвинутой индексации. Срезы сохраняют измерение, в то время как индексация с использованием целых чисел – нет.

Python
Скопировать код
sliced_candies = weird_array[:, :2, :]
print(sliced_candies.shape)  # Вывод: (2, 2, 1)

indexed_candies = weird_array[0, :, :]
print(indexed_candies.shape)  # Вывод: (3, 1)

Полезные материалы

  1. numpy.ndarray.shape — Руководство NumPy v1.26 — Подробное описание ndarray.shape от создателей NumPy.
  2. Полное руководство по Python NumPy – YouTube — Обучающее видео о работе с NumPy ndarrays, которые усваиваются легко и приятно.
  3. Трансляция — Руководство NumPy v1.26 — Подробное объяснение трансляции массивов в NumPy.
  4. Руководство по NumPy: Анализ данных с Python – Dataquest — Полезное руководство, охватывающее все аспекты работы с NumPy array, включая индексацию, подвыборки, и многое другое.
  5. numpy.meshgrid — Руководство NumPy v2.0.dev0 — Понятное объяснение применения функции meshgrid в NumPy для создания сеток координат.