Метод squeeze
Метод squeeze класса ndarray удаляет из массива все оси (измерения),
длина которых равна единице. В результате возвращается новый массив с меньшим
количеством измерений, но с тем же общим количеством элементов. Метод полезен
для упрощения формы массива после операций, которые могут добавлять
одиночные измерения, например, после индексации или использования
функций expand_dims.
Параметры метода:
-
axis(необязательный) - целое число, кортеж или None. Определяет, какие именно оси с размером 1 необходимо удалить. По умолчанию (None) удаляются все оси с размером 1. Если указана конкретная ось, которая имеет размер не равный 1, будет вызвана ошибка ValueError.
Синтаксис
arr.squeeze([axis])
Пример
Давайте создадим трехмерный массив с одним элементом в некоторых измерениях и удалим все оси с размером 1:
import numpy as np
arr = np.array([[[1], [2], [3]]])
print("Shape before:", arr.shape)
res = arr.squeeze()
print("Shape after:", res.shape)
print(res)
Результат выполнения кода:
"Shape before: (1, 3, 1)"
"Shape after: (3,)"
[1 2 3]
Пример
Удалим только конкретную ось с размером 1, передав параметр axis:
import numpy as np
arr = np.array([[[1, 2, 3]]])
print("Shape before:", arr.shape)
res = arr.squeeze(axis=0)
print("Shape after:", res.shape)
print(res)
Результат выполнения кода:
"Shape before: (1, 1, 3)"
"Shape after: (1, 3)"
[[1 2 3]]
Пример
Если передать ось, которая не имеет размера 1, метод вызовет ошибку:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("Shape:", arr.shape)
try:
res = arr.squeeze(axis=0)
except ValueError as err:
print("Error:", err)
Результат выполнения кода:
"Shape: (2, 3)"
"Error: cannot select an axis to squeeze out which has size not equal to one"
Пример
Метод squeeze часто используется для удаления лишних измерений после извлечения одного элемента из массива:
import numpy as np
arr = np.array([[1, 2, 3, 4, 5]])
print("Original shape:", arr.shape)
slice_arr = arr[:, 2:3]
print("After slicing shape:", slice_arr.shape)
res = slice_arr.squeeze()
print("After squeeze shape:", res.shape)
print(res)
Результат выполнения кода:
"Original shape: (1, 5)"
"After slicing shape: (1, 1)"
"After squeeze shape: ()"
3
Обратите внимание: массив скалярного размера (пустая форма) является допустимым результатом и содержит один элемент.