📜  Python中的 numpy.apply_along_axis()

📅  最后修改于: 2022-05-13 01:55:08.128000             🧑  作者: Mango

Python中的 numpy.apply_along_axis()

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

句法 :

numpy.apply_along_axis(1d_func, axis, array, *args, **kwargs) 

参数 :

1d_func  : the required function to perform over 1D array. It can only be applied in 
         1D slices of input array and that too along a particular axis. 
axis     : required axis along which we want input array to be sliced
array    : Input array to work on 
*args    : Additional arguments to 1D_function 
**kwargs : Additional arguments to 1D_function  

*args 和 **kwargs 实际上是什么?

这两个都允许你传递一个变量号。函数的参数。
*args :允许向函数发送非关键字可变长度参数列表。

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


Python
# Python Program illustrating
# use of **kwargs
 
def test_args_kwargs(in1, in2, in3):
    print ("in1:", in1)
    print ("in2:", in2)
    print ("in3:", in3)
     
     
kwargs = {"in3": 1, "in2": "No.","in1":"geeks"}
test_args_kwargs(**kwargs)


Python
# Python Program illustrating
# apply_along_axis() in NumPy
 
import numpy as geek
 
# 1D_func is "geek_fun"
def geek_fun(a):
    # Returning the sum of elements at start index and at last index
    # inout array
     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))


Python
# Python Program illustrating
# apply_along_axis() in NumPy
 
import numpy as geek
 
geek_array = geek.array([[8,1,7],
                         [4,3,9],
                         [5,2,6]])
 
# using pre-defined sorted function as 1D_func
print("Sorted as per axis 1 : \n", geek.apply_along_axis(sorted, 1, geek_array))
 
print("\n")
 
print("Sorted as per axis 0 : \n", geek.apply_along_axis(sorted, 0, geek_array))


输出 :

use of args  : 
    [3, 4, 5, 6, 7]

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

Python

# Python Program illustrating
# use of **kwargs
 
def test_args_kwargs(in1, in2, in3):
    print ("in1:", in1)
    print ("in2:", in2)
    print ("in3:", in3)
     
     
kwargs = {"in3": 1, "in2": "No.","in1":"geeks"}
test_args_kwargs(**kwargs)

输出 :

in1: geeks
in2: No.
in3: 1

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

Python

# Python Program illustrating
# apply_along_axis() in NumPy
 
import numpy as geek
 
# 1D_func is "geek_fun"
def geek_fun(a):
    # Returning the sum of elements at start index and at last index
    # inout array
     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

# Python Program illustrating
# apply_along_axis() in NumPy
 
import numpy as geek
 
geek_array = geek.array([[8,1,7],
                         [4,3,9],
                         [5,2,6]])
 
# using pre-defined sorted function as 1D_func
print("Sorted as per axis 1 : \n", geek.apply_along_axis(sorted, 1, geek_array))
 
print("\n")
 
print("Sorted as per axis 0 : \n", geek.apply_along_axis(sorted, 0, geek_array))

输出 :

Sorted as per axis 1 : 
 [[1 7 8]
 [3 4 9]
 [2 5 6]]


Sorted as per axis 0 : 
 [[4 1 6]
 [5 2 7]
 [8 3 9]]

笔记 :
这些代码不会在在线 IDE 上运行。因此,请在您的系统上运行它们以探索其工作原理。