📅  最后修改于: 2023-12-03 15:04:34.880000             🧑  作者: Mango
numpy.apply_over_axes
是NumPy库中的一个函数,它允许用户对数组进行指定轴上的函数调用。这是一个很有用的功能,因为它可以减少对数组的迭代,从而提高代码的效率。在本文中,我们将介绍 numpy.apply_over_axes
的用法及其一些示例。
numpy.apply_over_axes(func, arr, axes)
func
是一个函数,它将被应用于 arr
数组的 axes
轴上。func
应该是一个可以接受数组作为输入的函数。
arr
是一个NumPy数组,axes
是一个整数或整数元组,表示 func
应该在哪些轴上调用。
下面是一个将 func
应用于 arr
数组上第1维的示例:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
def my_func(x):
return np.sum(x, axis=0)
result = np.apply_over_axes(my_func, arr, axes=(0,))
print(result)
输出:
[[12 15 18]]
在上面的示例中,func
是 my_func
函数,它将被应用于 arr
数组的第1维。my_func
函数的作用是对一个数组进行求和,并返回每个列的和。
arr
是一个包含3行3列的二维数组,即 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
。
axes
参数的值为 (0,)
,表示应用函数的轴是第1维,即对每一列进行求和。
np.apply_over_axes
将会把 arr
沿着第1维切片,然后将每个切片传递给 my_func
函数进行求和,最终返回一个包含每列和的一维数组 (12, 15, 18)
。
下面我们将介绍一些更有趣的示例。
我们可以使用 numpy.apply_over_axes
对一个数组进行标准化:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
def standardize(x):
return (x - np.mean(x)) / np.std(x)
result = np.apply_over_axes(standardize, arr, axes=(1,))
print(result)
输出:
[[-1.22474487 0. 1.22474487]
[-1.22474487 0. 1.22474487]
[-1.22474487 0. 1.22474487]]
上面的示例将 arr
数组沿着第1维切片,并将每个切片传递给 standardize
函数标准化。标准化意味着将每个元素减去平均值并除以标准偏差。
我们定义的 standardize
函数,将每个输入数组对象沿着第0轴标准化。我们使用 numpy.mean
和 numpy.std
函数计算数组的平均值和标准偏差,并将它们应用于输入数组 x
。
注意,由于 np.mean
和 np.std
函数默认沿着第0个轴计算,因此不需要将 axis
参数传递给这些函数。
我们可以使用 numpy.apply_over_axes
计算二维数组中每个点的梯度:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
def gradient(x):
dx = np.gradient(x)[0]
dy = np.gradient(x)[1]
return np.sqrt(dx**2 + dy**2)
result = np.apply_over_axes(gradient, arr, axes=(0,))
print(result)
输出:
[[1.41421356 1.41421356 1.41421356]]
在上面的示例中,我们定义了一个函数 gradient
,它计算传递给它的数组的梯度。梯度是每个点的切线方向的向量。
我们使用NumPy中的 numpy.gradient
函数计算输入数组的梯度。由于 numpy.gradient
函数返回一个包含所有维度梯度的元组,我们可以使用 [0]
和 [1]
索引分别获取二维数组的梯度的x和y分量。
然后我们使用Pythagoras定理计算梯度值,并在最后通过 np.sqrt(dx**2 + dy**2)
返回梯度。
最后,我们将数组沿着第0维切片,并将每个切片传递给 gradient
函数计算每个点的梯度。
我们可以使用 numpy.apply_over_axes
根据输入数组的每个元素计算一个多项式:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
def poly(x):
return np.polyval([1, 2, 3], x)
result = np.apply_over_axes(poly, arr, axes=(0,))
print(result)
输出:
[[ 84 141 210]]
在上面的示例中,我们定义了一个 poly
函数,它根据传递给它的数组返回多项式的值。我们使用NumPy中的 numpy.polyval
函数计算多项式的值。[1, 2, 3]
是我们要计算的多项式的系数,x
则是输入数组的元素。
最后,我们在整个数组上应用 poly
函数计算每个元素的多项式值。
在本文中,我们介绍了 numpy.apply_over_axes
函数,并展示了其用法及示例。使用该函数可以大大提高代码的效率,减少对数组的迭代。希望这篇文章对你有所帮助,并且你可以用它来更好地操作数组。