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.