Spec-Zone.ru › NumPy 1.21

numpy.apply_along_axis

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

Применяет функцию к 1-мерным срезам вдоль заданной оси.

Выполняет func1d(a, *args, **kwargs), где func1d работает с 1-мерными массивами, а a — это 1-мерный срез arr вдоль axis.

Это эквивалентно (но быстрее), чем следующее использование ndindex и s_, которые устанавливают каждый из ii, jj, и kk в кортеж индексов:

Ni, Nk = a.shape[:axis], a.shape[axis+1:]
for ii in ndindex(Ni):
    for kk in ndindex(Nk):
        f = func1d(arr[ii + s_[:,] + kk])
        Nj = f.shape
        for jj in ndindex(Nj):
            out[ii + jj + kk] = f[jj]

В эквивалентном выражении, исключая внутренний цикл, это можно записать как:

Ni, Nk = a.shape[:axis], a.shape[axis+1:]
for ii in ndindex(Ni):
    for kk in ndindex(Nk):
        out[ii + s_[...,] + kk] = func1d(arr[ii + s_[:,] + kk])
Параметры
func1dfunction (M,) -> (Nj…)

Эта функция должна принимать 1-мерные массивы. Она применяется к 1-мерным срезам arr вдоль указанной оси.

axisцелое число

Ось, вдоль которой выполняется срез arr.

arrndarray (Ni…, M, Nk…)

Входной массив.

argsлюбой

Дополнительные аргументы для func1d.

kwargsлюбой

Дополнительные именованные аргументы для func1d.

Добавлен в версии 1.9.0.

Возвращает
outndarray (Ni…, Nj…, Nk…)

Выходной массив. Форма out идентична форме arr, за исключением размерности axis. Эта ось удаляется и заменяется новыми размерностями, равными форме возвращаемого значения func1d. Так, если func1d возвращает скаляр, out будет иметь на одну размерность меньше, чем arr.

См. также

apply_over_axes

Применяет функцию многократно по нескольким осям.

Примеры

>>> def my_func(a):
...     """Average first and last element of a 1-D array"""
...     return (a[0] + a[-1]) * 0.5
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(my_func, 0, b)
array([4., 5., 6.])
>>> np.apply_along_axis(my_func, 1, b)
array([2.,  5.,  8.])

Для функции, возвращающей 1-мерный массив, количество измерений в outarr такое же, как в arr.

>>> b = np.array([[8,1,7], [4,3,9], [5,2,6]])
>>> np.apply_along_axis(sorted, 1, b)
array([[1, 7, 8],
       [3, 4, 9],
       [2, 5, 6]])

Для функции, возвращающей массив более высокой размерности, эти размерности вставляются вместо размерности axis.

>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(np.diag, -1, b)
array([[[1, 0, 0],
        [0, 2, 0],
        [0, 0, 3]],
       [[4, 0, 0],
        [0, 5, 0],
        [0, 0, 6]],
       [[7, 0, 0],
        [0, 8, 0],
        [0, 0, 9]]])

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.apply_along_axis.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API