Spec-Zone.ru › NumPy 1.19

numpy.ma.apply_along_axis

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

Spec-Zone.ru

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