Spec-Zone.ru › NumPy 1.21

numpy.ma.apply_along_axis

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

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.ma.apply_along_axis.html

Spec-Zone.ru

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