numpy.apply_along_axis #

麻木的。apply_along_axis ( func1d , axis , arr , * args , ** kwargs ) [来源] #

将函数应用于沿给定轴的一维切片。

执行func1d(a, *args, **kwargs),其中func1d对一维数组进行操作,a是arr沿axis的一维切片。

这相当于(但比)以下使用ndindexand 更快s_,它将每个iijj、 和设置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])
参数
func1d函数 (M,) -> (Nj…)

该函数应该接受一维数组。它应用于arr沿指定轴的一维切片。

整数

arr被切片的轴。

arr ndarray (Ni…, M, Nk…)

输入数组。

参数任意

func1d的附加参数。

夸格斯任何

func1d的附加命名参数。

1.9.0 版本中的新增功能。

返回
out ndarray (Ni…, Nj…, Nk…)

输出数组。除了沿轴维度外, out的形状与arr的形状相同 。该轴将被删除,并替换为等于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.])

对于返回一维数组的函数, 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]])

对于返回高维数组的函数,将插入这些维度来代替维度。

>>> 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]]])