Spec-Zone.ru › NumPy 2.0

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

Spec-Zone.ru

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