NumPy参考 >例行程序 >Functional programming > numpy.apply_along_axis
numpy.
apply_along_axis
(func1d,axis,arr,* args,** kwargs )[源代码] ¶将函数应用于沿给定轴的一维切片。
执行func1d(a,* args),其中func1d对一维数组进行操作,并且a 是沿axis的一维arr切片。
这相当于(但快于)以下使用的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])
此函数应接受一维数组。它将沿指定轴应用于arr的一维切片。
切割arr的轴。
输入数组。
func1d的附加参数。
func1d的其他命名参数。
1.9.0版中的新功能。
输出数组。的形状出相同的形状 ARR,除了沿所述轴线的维度。删除该轴,并用等于func1d返回值形状的新尺寸替换。因此,如果func1d返回标量输出,则其尺寸比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]]])