numpy.apply庠沿庠轴到底执行什么?

2024-04-19 07:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一些代码中遇到了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],[7,8,9]中沿轴[1,2,3]应用函数,即轴0

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


Tags: 函数代码文档numpy示例newdefnp
2条回答

该函数在一维数组上沿轴0执行。可以使用“axis”参数指定另一个轴。这个范例的用法是:

np.apply_along_axis(np.cumsum, 0, b)

该函数沿0维在每个子阵上执行。因此,它是针对一维函数的,并为每个一维输入返回一个一维数组。

另一个例子是:

np.apply_along_axis(np.sum, 0, b)

为一维数组提供标量输出。 当然,您可以设置cumsum或sum中的axis参数来执行上述操作,但这里的要点是它可以用于您编写的任何一维函数。

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

相关问题 更多 >