📜  Python中的 numpy.apply_over_axes()

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

Python中的 numpy.apply_over_axes()

numpy.apply_over_axes()在数组中的多个轴上重复应用一个函数。

句法 :

numpy.apply_over_axes(func, array, axes)

参数 :

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  

返回 :

The output array. Shape of the output array can be different depending on whether func 
changes the shape of its output with respect to its input.

代码 1:

Python
# Python Program illustrating
# apply_over_axis() in NumPy
 
import numpy as geek
 
# Using a 3D array
geek_array = geek.arange(16).reshape(2, 2, 4)
print("geek array  :\n", geek_array)
 
# Applying pre-defined sum function over the axis of 3D array
print("\nfunc sum : \n ", geek.apply_over_axes(geek.sum, geek_array, [1, 1, 0]))
 
# Applying pre-defined min function over the axis of 3D array
print("\nfunc min : \n ", geek.apply_over_axes(geek.min, geek_array, [1, 1, 0]))


Python
# Python Program illustrating
# apply_over_axis() in NumPy
 
import numpy as geek
 
# Using a 2D array
geek_array = geek.arange(16).reshape(4, 4)
print("geek array  :\n", geek_array)
 
"""
    ->[[ 0  1  2  3]    min : 0     max : 3    sum =  0 + 1 + 2 + 3
    -> [ 4  5  6  7]    min : 4     max : 7    sum =  4 + 5 + 6 + 7
    -> [ 8  9 10 11]    min : 8     max : 11   sum =  8 + 9 + 10 + 11
    -> [12 13 14 15]]   min : 12    max : 15   sum =  12 + 13 + 14 + 15
 
"""
 
# Applying pre-defined min function over the axis of 2D array
print("\nApplying func max : \n ", geek.apply_over_axes(geek.max, geek_array, [1, -1]))
 
# Applying pre-defined min function over the axis of 2D array
print("\nApplying func min : \n ", geek.apply_over_axes(geek.min, geek_array, [1, -1]))
 
# Applying pre-defined sum function over the axis of 2D array
print("\nApplying func sum : \n ", geek.apply_over_axes(geek.sum, geek_array, [1, -1]))


Python
# Python Program illustrating
# equivalent to apply_over_axis()
 
import numpy as geek
 
# Using a 3D array
geek_array = geek.arange(16).reshape(2, 2, 4)
print("geek array  :\n", geek_array)
 
# returning sum of all elements as per the axis
print("func : \n", geek.sum(geek_array, axis=(1, 0, 2), keepdims = True))


输出 :

geek array  :
 [[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]

func sum : 
  [[[24 28 32 36]]]

func min : 
  [[[0 1 2 3]]]

代码 2:

Python

# Python Program illustrating
# apply_over_axis() in NumPy
 
import numpy as geek
 
# Using a 2D array
geek_array = geek.arange(16).reshape(4, 4)
print("geek array  :\n", geek_array)
 
"""
    ->[[ 0  1  2  3]    min : 0     max : 3    sum =  0 + 1 + 2 + 3
    -> [ 4  5  6  7]    min : 4     max : 7    sum =  4 + 5 + 6 + 7
    -> [ 8  9 10 11]    min : 8     max : 11   sum =  8 + 9 + 10 + 11
    -> [12 13 14 15]]   min : 12    max : 15   sum =  12 + 13 + 14 + 15
 
"""
 
# Applying pre-defined min function over the axis of 2D array
print("\nApplying func max : \n ", geek.apply_over_axes(geek.max, geek_array, [1, -1]))
 
# Applying pre-defined min function over the axis of 2D array
print("\nApplying func min : \n ", geek.apply_over_axes(geek.min, geek_array, [1, -1]))
 
# Applying pre-defined sum function over the axis of 2D array
print("\nApplying func sum : \n ", geek.apply_over_axes(geek.sum, geek_array, [1, -1]))

输出 :

geek array  :
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

Applying func max : 
  [[ 3]
 [ 7]
 [11]
 [15]]

Applying func min : 
  [[ 0]
 [ 4]
 [ 8]
 [12]]

Applying func sum : 
  [[ 6]
 [22]
 [38]
 [54]]

代码 3:等效于代码 2,不使用 numpy.apply_over_axis()

Python

# Python Program illustrating
# equivalent to apply_over_axis()
 
import numpy as geek
 
# Using a 3D array
geek_array = geek.arange(16).reshape(2, 2, 4)
print("geek array  :\n", geek_array)
 
# returning sum of all elements as per the axis
print("func : \n", geek.sum(geek_array, axis=(1, 0, 2), keepdims = True))

输出 :

geek array  :
 [[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]]
func : 
 [[[120]]]

参考 :
https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.apply_over_axes.html

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