numpy.apply_along_axis()

Функция numpy.apply_along_axis() применяет одномерную функцию func1d к каждому «срезу» массива вдоль указанной оси. Удобна, когда нужно посчитать произвольную статистику по строкам/столбцам.

Сигнатура

numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)

Параметры

  • func1d — функция, принимающая 1-D массив и возвращающая скаляр или массив.

  • axis — ось, вдоль которой выполняется применение.

  • arr — входной массив, размерность >= 1.

  • *args, **kwargs — дополнительные аргументы для func1d.

Возвращаемое значение

ndarray. Если func1d возвращает скаляр, размерность результата на 1 меньше, чем у arr. Если массив — результат конструируется по форме возврата.

Примеры

Пример 1. Размах (max − min) по строкам.

import numpy as np

def peak_to_peak(x):
    return x.max() - x.min()

m = np.array([[1, 7, 3], [5, 2, 9]])
print(np.apply_along_axis(peak_to_peak, 1, m))
[6 7]

Пример 2. Норма (длина) каждого столбца.

m = np.array([[3.0, 0.0], [4.0, 5.0]])
print(np.apply_along_axis(np.linalg.norm, 0, m))
[5.         5.        ]

Пример 3. Сортировка каждой строки отдельно.

m = np.array([[3, 1, 2], [9, 4, 7]])
print(np.apply_along_axis(sorted, 1, m))
[[1 2 3]
 [4 7 9]]

Пример 4. Среднее показаний трёх датчиков на каждом такте.

# 4 такта × 3 датчика
readings = np.array([[20, 21, 19],
                     [22, 23, 21],
                     [25, 24, 26],
                     [27, 28, 27]])
avg_per_tick = np.apply_along_axis(np.mean, 1, readings)
print(avg_per_tick)
[20.         22.         25.         27.33333333]

Пример 5. Передача дополнительных аргументов.

def trimmed_mean(x, low, high):
    return x[(x >= low) & (x <= high)].mean()

m = np.array([[1, 5, 100, 7], [2, 3, 99, 4]])
print(np.apply_along_axis(trimmed_mean, 1, m, 0, 10))
[4.33333333 3.        ]

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации NumPy (https://numpy.org/doc/stable/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.