Spec-Zone.ru › NumPy 2.0

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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.apply_along_axis.html

Spec-Zone.ru

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