Определение размерностей массива с помощью numpy в Python
Быстрый ответ
Чтобы определить размер каждого измерения (или оси) в массиве NumPy, воспользуйтесь атрибутом .shape
. Этот атрибут возвращает кортеж, отображающий размерности массива:
import numpy as np
my_array = np.array([[1, 2, 3], [4, 5, 6]])
print(my_array.shape) # Вывод: (2, 3)
Здесь (2, 3)
сообщает нам, что массив состоит из 2 строк и 3 столбцов, представляя собой контейнер, аналогичный прямоугольной коробке конфет.
Разбор свойства .shape
Что такое .shape
Атрибут .shape
представляет собой кортеж целых чисел, где каждое число отражает размер соответствующего измерения (оси) в массиве NumPy. Длина этого кортежа указывает на ранг массива.
weird_array = np.array([[[1], [2], [3]], [[4], [5], [6]]])
print(weird_array.shape) # Вывод: (2, 3, 1)
Индексация размерностей
Доступ к различным размерностям массива можно получить через индексы кортежа shape
:
print(my_array.shape[0]) # Количество строк
print(my_array.shape[1]) # Количество столбцов
Количество измерений при помощи .ndim
Если вам нужно узнать число измерений массива, используйте атрибут .ndim
:
print(weird_array.ndim) # Вывод: 3
Важность понимания формы массива
Форма при выполнении операций
Понимание формы массива является важным при выполнении различных операций, например, трансляции, что позволяет избежать ошибок, вызванных несоответствием размерностей.
candy_1 = np.array([1, 2, 3])
candy_2 = np.array([[4], [5], [6]])
print((candy_1 + candy_2).shape) # Трансляция массивов (3,) и (3,1)
Изменение формы массивов для преобразования данных
Метод .reshape
позволяет изменить форму массива без влияния на его данные. Это очень полезно при подготовке данных для анализа или обучения моделей машинного обучения.
reshaped_sweets = my_array.reshape((3, 2))
print(reshaped_sweets.shape) # Вывод: (3, 2)
Итерация по многомерным массивам
Используя вложенные циклы для прохода по элементам массивов, знание размерности помогает избежать ошибок IndexError и обеспечивает более эффективную обработку данных.
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 массив ([🍊, 🍊, 🍊]
): Линейное расположение апельсинов.
# Воспринимайте это как лоток с апельсинами
np.array([🍊, 🍊, 🍊])
2D массив ([[🍊, 🍊], [🍊, 🍊]]
): Несколько слоев коробок, расположенных друг на друге в упорядоченном порядке.
# Воспринимайте это как ящики на складе,
# где каждый ящик представляет собой отдельный слой
np.array([[🍊, 🍊], [🍊, 🍊]])
3D массив ([[[🍊], [🍊]], [[🍊], [🍊]]]
): Полки с множеством упорядоченно расположенных коробок, формирующие трехмерное пространство.
# Воспринимайте это как стеллажи на складе с ящиками апельсинов
np.array([[[🍊], [🍊]], [[🍊], [🍊]]])
Эффективные способы изменения формы массивов
Преобразование к одномерному виду
Массив можно превратить в одномерный при помощи методов .flatten()
или .ravel()
. Это приходится по вкусу функциям, которым требуются одномерные массивы.
flat_candies = weird_array.flatten()
print(flat_candies.shape) # Вывод: (6,)
Увеличение размерности
Чтобы добавить дополнительные оси (измерения), используйте np.newaxis
или .reshape
. Это может быть актуально, например, при работе со сверточными нейронными сетями.
pumped_candies = candy_1[:, np.newaxis]
print(pumped_candies.shape) # Вывод: (3, 1)
Срезы и индексация
Форма массива может быть изменена благодаря использованию срезов и продвинутой индексации. Срезы сохраняют измерение, в то время как индексация с использованием целых чисел – нет.
sliced_candies = weird_array[:, :2, :]
print(sliced_candies.shape) # Вывод: (2, 2, 1)
indexed_candies = weird_array[0, :, :]
print(indexed_candies.shape) # Вывод: (3, 1)
Полезные материалы
- numpy.ndarray.shape — Руководство NumPy v1.26 — Подробное описание
ndarray.shape
от создателей NumPy. - Полное руководство по Python NumPy – YouTube — Обучающее видео о работе с NumPy
ndarrays
, которые усваиваются легко и приятно. - Трансляция — Руководство NumPy v1.26 — Подробное объяснение трансляции массивов в NumPy.
- Руководство по NumPy: Анализ данных с Python – Dataquest — Полезное руководство, охватывающее все аспекты работы с NumPy array, включая индексацию, подвыборки, и многое другое.
- numpy.meshgrid — Руководство NumPy v2.0.dev0 — Понятное объяснение применения функции meshgrid в NumPy для создания сеток координат.