Удаление размерности из массивов NumPy с помощью NumPy Squeeze

В этом учебном пособии вы узнаете, как использовать функцию NumPy squeeze(). Функция np.squeeze() позволяет удалять одномерные записи из формы массива. Это позволяет лучше трансформировать массивы, форма которых не подходит для вашей работы.

Кратко, функция возвращает входной массив, из которого удалены все подмассивы, длина измерения которых равна 1.

К концу этого урока вы научитесь:

Оглавление

Понимание синтаксиса функции сжатия() NumPy

Перед тем как рассмотреть, как использовать функцию np.squeeze(), давайте взглянем на различные параметры этой функции. Прекрасно то, что функцию np.squeeze() также можно применять как метод массива NumPy. В этом случае массив, конечно же, передавать не нужно.

Давайте рассмотрим параметры функции:

# Understanding the np.squeeze() Function
np.squeeze(
   a=,           # The array to squeeze
   axis = None   # Selecting a subset of entries
)

Мы видим из приведенного выше блока кода, что функция принимает два параметра:

  1. Массив для сжатия, который должен быть похож на массив (например, список в Python)

  2. Ось для сжатия, которая может быть None, целым числом или кортежем целых чисел.

Теперь, когда вы знакомы с синтаксисом функции np.squeeze(), давайте рассмотрим простой пример использования этой функции.

Как использовать сжатие NumPy() в массиве NumPy

В этом разделе вы узнаете, как использовать функцию squeeze() в NumPy на примере. Мы создадим массив, у которого будут дополнительные размерности с длиной 1. Давайте сначала создадим этот массив, используя функцию np.linspace() и изменим его форму.

# Creating an Array in NumPy
import numpy as np
arr = np.linspace(0, 5, 6).reshape(1,2,3)

print(arr)

# Returns:
# [[[0. 1. 2.]
#   [3. 4. 5.]]]

Мы можем проверить форму массива, используя атрибут .shape, как показано ниже:

# Checking the Shape of Our NumPy Array
import numpy as np
arr = np.linspace(0, 5, 6).reshape(1,2,3)

print(arr.shape)

# Returns: (1, 2, 3)

Мы видим, что в массиве присутствует потенциально излишнее измерение. Мы можем использовать функцию np.squeeze() для удаления этого измерения из нашего массива. Давайте посмотрим, как это делается:

# Removing a Dimension of Length 1 Using np.squeeze()
import numpy as np
arr = np.linspace(0, 5, 6).reshape(1,2,3)
print(f'Original array shape: {arr.shape}')

arr = np.squeeze(arr)
print(f'Modified array shape: {arr.shape}')

# Returns: 
# Original array shape: (1, 2, 3)
# Modified array shape: (2, 3)

Изначально у нас был массив с формой (1, 2, 3). Когда мы выполнили операцию squeeze для массива, это удалило изначальное измерение с длиной 1.

Как использовать сжатие NumPy() только с некоторыми осями

В приведенном выше примере мы использовали функцию squeeze() из NumPy для безразличного удаления измерений длиной 1. По умолчанию NumPy будет передавать параметр axis=None, который и будет делать именно это. Если нам не нужно такое поведение, мы можем изменить параметр axis=, чтобы удалять только некоторые измерения.

Давайте создадим более сложный массив для работы:

# Creating an Array with Multiple Dimensions of Length 1
import numpy as np
arr = np.linspace(0, 5, 6).reshape(1,2,1,3)

print(arr)

# Returns:
# [[[[0. 1. 2.]]
# 
#   [[3. 4. 5.]]]]

Мы видим, что размеры массива имеют две оси длиной ровно 1. Давайте посмотрим, как мы можем удалить только одну из этих осей.

Давайте посмотрим, как мы можем использовать функцию np.squeeze() для удаления третьей оси. Поскольку индексация в Python начинается с 0, нам нужно передать значение оси, равное 2.

# Squeezing Only Particular Axes in NumPy
import numpy as np
arr = np.linspace(0, 5, 6).reshape(1,2,1,3)
print(f'Original array shape: {arr.shape}')

arr = np.squeeze(arr, 2)
print(f'Modified array shape: {arr.shape}')

# Returns: 
# Original array shape: (1, 2, 1, 3)
# Modified array shape: (1, 2, 3)

Мы видим, что функция удалила только третью ось, но сохранила первую. **Важно отметить, однако, что если бы мы попытались удалить ось, длина которой не была равна 1, была бы вызвана ошибка

Заключение

В этом руководстве вы научились использовать функцию NumPy squeeze() для уменьшения размерности массива. Функция удаляет оси длиной 1, которые могут мешать анализу данных. Сначала вы научились понимать синтаксис функции и ее два параметра. Затем вы узнали, как использовать функцию на примере. Наконец, вы научились использовать функцию для удаления только определенных осей.

Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с учебными пособиями ниже:

  • NumPy Pad: использование np.pad() для заполнения массивов и матриц

  • np.argmax(): Как использовать NumPy Argmax

  • Плитка NumPy для упорядочения массивов

  • NumPy для науки о данных в Python

Last updated