Spec-Zone.ru › NumPy 1.20

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 вдоль указанной оси.

axisinteger

Ось, вдоль которой происходит срез arr.

arrndarray (Ni…, M, Nk…)

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

argsany

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

kwargsany

Дополнительные именованные аргументы для 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.apply_along_axis.html

Spec-Zone.ru

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