问题 numpy.apply_along_axis的表现究竟如何?


我遇到了 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] 这是轴 0 在[[1,2,3],[4,5,6],[7,8,9]]

显然我错了。你能纠正我吗?


12927
2018-01-26 14:29


起源



答案:


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 沿着输入数组的第一或第二轴(维度)的每个切片施加。


11
2018-01-26 15:05





该功能在轴= 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函数。


2
2018-01-26 14:51