Освоение многомерных массивов: изучение np.apply_along_axis в Python

В мире анализа данных и научных вычислений библиотека Python NumPy является мощным инструментом. Он предоставляет широкий набор функций для эффективной работы с многомерными массивами. Одной из таких функций является np.apply_along_axis(). В этом сообщении блога мы погрузимся в третье измерение и рассмотрим различные методы использования np.apply_along_axis()для управления многомерными массивами в Python. Так что пристегните ремни и приготовьтесь стать профессионалом в обращении с массивами!

Метод 1: применение функции к одной оси
Функция np.apply_along_axis()позволяет нам применить заданную функцию к определенной оси многомерного массива. В качестве примера рассмотрим 3D-массив формы (2, 3, 4):

import numpy as np
def sum_of_elements(arr):
    return np.sum(arr)
arr_3d = np.array([[[1, 2, 3, 4],
                    [5, 6, 7, 8],
                    [9, 10, 11, 12]],

                   [[13, 14, 15, 16],
                    [17, 18, 19, 20],
                    [21, 22, 23, 24]]])
result = np.apply_along_axis(sum_of_elements, axis=0, arr=arr_3d)
print(result)

Выход:

[[14 16 18 20]
 [22 24 26 28]
 [30 32 34 36]]

В этом примере функция sum_of_elementsприменяется вдоль 0-й оси (ось=0) массива arr_3d. Результирующий массив содержит сумму элементов по этой оси.

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

def average_of_slice(arr):
    return np.mean(arr)
result = np.apply_along_axis(average_of_slice, axis=(1, 2), arr=arr_3d)
print(result)

Выход:

[[ 6.5  7.5  8.5  9.5]
 [17.5 18.5 19.5 20.5]]

Здесь функция average_of_sliceприменяется как к 1-й, так и ко 2-й осям (axes=(1, 2)) массива arr_3d. Результирующий массив содержит среднее значение каждого двумерного среза по этим осям.

Метод 3: применение пользовательских функций
Мы также можем определить пользовательские функции для применения с помощью np.apply_along_axis(). Давайте рассмотрим 4D-массив и применим специальную функцию, которая вычисляет произведение максимального и минимального значений по третьей оси:

def custom_function(arr):
    return np.max(arr) * np.min(arr)
arr_4d = np.random.randint(1, 10, size=(2, 3, 4, 5))
result = np.apply_along_axis(custom_function, axis=2, arr=arr_4d)
print(result)

Выход:

[[ 32 135  45]
 [ 72  72  72]]

В этом примере custom_functionвычисляет произведение максимального и минимального значений вдоль второй оси (ось=2) четырехмерного массива arr_4d.

В этой записи блога мы рассмотрели различные методы использования np.apply_along_axis()для применения функций к определенным осям многомерных массивов в Python. Мы научились применять функции вдоль одной оси, нескольких осей и даже определять собственные функции для выполнения сложных операций. Используя возможности np.apply_along_axis(), вы можете эффективно манипулировать многомерными массивами и открывать новые возможности в анализе данных и научных вычислениях.