我在某些代码中遇到了numpy.apply_along_axis函数。我不明白有关它的文档。
这是文档的一个示例:
>>> def new_func(a):
... """Divide elements of a by 2."""
... return a * 0.5
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(new_func, 0, b)
array([[ 0.5, 1. , 1.5],
[ 2. , 2.5, 3. ],
[ 3.5, 4. , 4.5]])
据我所知,我理解文档,我原以为:
array([[ 0.5, 1. , 1.5],
[ 4 , 5 , 6 ],
[ 7 , 8 , 9 ]])
即。在[[1,2,3],[4,5,6]中沿 [1,2,3] 轴( 0 )应用了该函数, [7,8,9]
显然我错了。你能纠正我吗?
答案 0 :(得分:13)
apply_along_axis
沿着输入数组的1D切片应用提供的函数,沿着您指定的轴截取切片。因此,在您的示例中,new_func
沿着第一个轴应用于数组的每个切片。如果使用向量值函数而不是标量,它会变得更清晰:
In [20]: b = np.array([[1,2,3], [4,5,6], [7,8,9]])
In [21]: np.apply_along_axis(np.diff,0,b)
Out[21]:
array([[3, 3, 3],
[3, 3, 3]])
In [22]: np.apply_along_axis(np.diff,1,b)
Out[22]:
array([[1, 1],
[1, 1],
[1, 1]])
此处,numpy.diff
沿着输入数组的第一个或第二个轴(维度)的每个切片应用。
答案 1 :(得分:4)
该功能沿轴= 0在1-d阵列上执行。您可以使用“axis”参数指定另一个轴。这种范例的用法是:
np.apply_along_axis(np.cumsum, 0, b)
该函数在每个子阵列上沿着维度0执行。因此,它用于1-D函数并为每个1-D输入返回1D数组。
另一个例子是:
np.apply_along_axis(np.sum, 0, b)
为1-D阵列提供标量输出。 当然你可以在cumsum或sum中设置轴参数来执行上述操作,但这里的要点是它可以用于你编写的任何1-D函数。