📜  Python中的numpy.apply_along_axis

📅  最后修改于: 2020-06-05 04:45:59             🧑  作者: Mango

numpy.apply_along_axis(1d_func, axis, array, *args, **kwargs) : 帮助我们将必需的函数应用于给定数组的一维切片。
1d_func(ar,* args):适用于一维数组,其中ar是沿轴arr的一维切片。

参数:

1d_func:执行一维数组所需的函数。它只能应用于
         输入数组的一维切片,以及沿特定轴的一维切片。
axis:我们要对输入数组进行切片的必需轴
array:要处理的输入数组
* args:1D_function的附加参数
** kwargs:1D_function的附加参数

* args和** kwargs实际上是什么?
这两个都允许您传递变量,即函数的参数。
* args:允许向函数发送非关键字可变长度参数列表,例子如下: 

# Python Program illustrating  
# use of *args 
  
args = [3, 8] 
a = list(range(*args)) 
print("args的使用  : \n   ", a) 

输出: 

args的使用:
    [ 3,4,5,6,7 ]

 

** kwargs:允许您将参数的关键字可变长度参数传递给函数。当我们要处理函数中的命名参数时使用它。 

# Python程序说明kwargs的用法 
  
def test_args_kwargs(in1, in2, in3): 
    print ("in1:", in1) 
    print ("in2:", in2) 
    print ("in3:", in3) 
      
      
kwargs = {"in3": 1, "in2": "No.","in1":"mango"} 
test_args_kwargs(**kwargs) 

输出: 

in1: mango
in2: No.
in3: 1

  代码1:解释numpy.apply_along_axis()用法的Python代码 

# Python程序在NumPy中说明了apply_along_axis() 
  
import numpy as geek  
  
# 1D_func is "geek_fun" 
def geek_fun(a): 
    # 返回inout数组中起始索引和最后索引处元素的总和 
     return (a[0] + a[-1]) 
   
arr = geek.array([[1,2,3],  
                [4,5,6],  
                [7,8,9]]) 
      
''' 
              -> [1,2,3] <-   1 + 7 
                 [4,5,6]      2 + 8 
              -> [7,8,9] <-   3 + 9 
''' 
print("axis=0 : ", geek.apply_along_axis(geek_fun, 0, arr)) 
print("\n") 
  
'''             |   | 
               [1,2,3]   1 + 3 
               [4,5,6]   4 + 6 
               [7,8,9]   7 + 9 
                ^   ^                
''' 
print("axis=1 : ", geek.apply_along_axis(geek_fun, 1, arr)) 

输出: 

axis=0 :  [ 8 10 12]


axis=1 :  [ 4 10 16]

代码2:在NumPy Python中使用apply_along_axis()进行排序 

# Python程序在NumPy中说明了apply_along_axis() 
  
import numpy as geek  
  
geek_array = geek.array([[8,1,7], 
                         [4,3,9], 
                         [5,2,6]]) 
  
# 使用预定义的排序函数作为1D_func 
print("按轴1排序: \n", geek.apply_along_axis(sorted, 1, geek_array)) 
  
print("\n") 
  
print("按轴0排序: \n", geek.apply_along_axis(sorted, 0, geek_array)) 

输出: 

按轴1排序:
 [[1 7 8] 
 [3 4 9] 
 [2 5 6]] 


按轴0排序:
 [[4 1 6] 
 [5 2 7] 
 [8 3 9]]