【问题标题】:what does numpy.apply_along_axis perform exactly?numpy.apply_along_axis 究竟执行了什么?
【发布时间】:2012-01-26 14:29:06
【问题描述】:

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

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

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    apply_along_axis 沿输入数组的一维切片应用提供的函数,切片沿您指定的轴截取。因此,在您的示例中,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(即相邻数组元素的算术差异)沿输入数组的第一轴或第二轴(维度)的每个切片应用。

    【讨论】:

    • 不知道 np.diff 做了什么,我没有得到这个解释。我假设 np.diff 在比较两个数组项时返回不同项的数量?
    • @Simeon:你不需要假设。您可以准确阅读该函数的作用:numpy.org/doc/stable/reference/generated/…
    • 为了更准确地说,我建议更改您的解释,以便在此处使用更直观的功能。在试图理解另一种解释的同时阅读特殊功能的功能有时会分散注意力。
    【解决方案2】:

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

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

    该函数在维度 0 上的每个子数组上执行。因此,它适用于一维函数,并为每个一维输入返回一个一维数组。

    另一个例子是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 2016-09-10
      • 2023-03-15
      • 2012-10-17
      • 2021-06-04
      • 1970-01-01
      • 2018-07-30
      • 2019-10-06
      相关资源
      最近更新 更多