Python中用NumPy创建自己的通用函数

NumPy 是 Numerical Python 的缩写,是用于临床计算的 Python 环境中的基础库。它为运行大型多维数组和矩阵提供帮助,并提供广泛的数学功能以成功地对这些数组进行操作。

NumPy 的关键功能之一是它能够创建通用函数 (ufunc),它可以帮助您详细遵循 NumPy 数组的自定义操作。

这里,我们将探索如何使用 Python 在 NumPy 中创建您自己的通用特征。

什么是通用函数 (ufunc)?
在 NumPy 中,通用函数(ufunc)是一种对 NumPy 数组进行元素敏感操作的功能,这意味着它独立地对数组的每个元素执行操作。 Ufunc 旨在成功地使用大型数组进行绘制,并且是 NumPy 中许多操作的基本构建块。

NumPy 中的常见 ufunc 由加法、减法、乘法、除法、三角函数等数学函数组成。例如,如果您需要详细添加两个 NumPy 数组,则可以使用numpy.add() ufunc,它是一个内置 ufunc。

为什么使用ufunc?
Ufunc 用于在 NumPy 中强制执行向量化,这比迭代因子更快。

他们还提供广播和其他策略,如减少、聚集等。这可能对计算非常有帮助。

Ufunc 还接受其他参数,例如:

  • 布尔数组或条件中的位置定义了操作必须占用的区域。
  • dtype定义因子的返回类型。
  • 输出数组,其中需要复制返回成本。

创建您自己的 Ufunc
在 NumPy 中创建自己的 ufunc 可以让您概述自定义操作,并有效地观察它们对 NumPy 数组敏感的细节。以下是开发您自己的 ufunc 的分步指南:

第 1 步:导入 NumPy
首先,您需要导入 NumPy 库。如果您尚未安装 NumPy,则可以使用 pip 来完成此操作:
pip install numpy  

import numpy as np  

第 2 步:定义您的自定义函数
创建一个 Python 函数,定义您需要详细应用于 NumPy 数组的自定义操作。这一功能应该采用一个或多个标量参数并返回操作的最终结果。例如,允许创建一个简单的自定义 ufunc,对数组的每个元素进行平方:


def square_function(x):  
    return x ** 2  

步骤 3:使用 numpy.Frompyfunc() 创建 Ufunc
要将您的自定义特征直接转换为 ufunc,您可以使用numpy.frompyfunc()功能。此特性接受参数:自定义 Python 函数及其所需的各种输入参数。在我们的实例中,square_function采用一个输入参数,因此我们将其作为第二个参数传递给numpy.frompyfunc():

square_ufunc = np.frompyfunc(square_function,  1 ,  1 )  

square_ufunc对象已转换为 ufunc,现在可以在 NumPy 数组上使用。

第 4 步:使用您的自定义 Ufunc
现在您已经创建了自定义 ufunc,您可以使用它在 NumPy 数组上运行,就像使用集成 ufunc 一样。这是使用 square_ufunc 的方法的一个实例:

arr = np.array([8, 4, 2 ,1, 3])  
result = square_ufunc(arr)  
print(result)  

输入1:

import numpy as np  
  
Define the  Custom Function  
def square_function(x):  
    return x ** 2  
  
使用 numpy.frompyfunc() 创建一个 Ufunc;
square_ufunc = np.frompyfunc(square_function, 1, 1)  
  
使用自定义 Ufunc  
# 创建一个 NumPy 数组  ;
arr = np.array([8, 4, 2, 1, 3])  
  
# Apply the custom ufunc to the array  
result = square_ufunc(arr)  
  
print(result)  

输出:
[64 16 4 1 9]


输入2:

import numpy as np  
  
def myadd(x, y):  
  return x+y  
  
myadd = np.frompyfunc(myadd, 2, 1)  
  
print(myadd([8, 4, 2, 1], [0, 2, 8, 2]))  

输出:

[8 6 10 3 ]

自定义 Ufunc 的优点
在 NumPy 中创建自定义 ufunc 有几个好处:

  1. 可重用性:一旦描述了自定义 ufunc,您就可以在代码的独特组件中重用它,从而提高代码的可重用性和可维护性。
  2. 集成:自定义 ufunc 可以无缝集成到现有的基于 NumPy 的工作流程中,从而更轻松地扩展 NumPy 的功能来满足您的独特需求。
  3. 效率: Ufunc 针对性能进行了优化,并且可以成功地与大型阵列配合使用。通过开发自定义 ufunc,您可以成功地将自定义操作应用于大数据集。

最后,在 NumPy 中开发您自己的通用功能 (ufunc) 是扩展库功能以满足您的特定需求的有效方法。无论您是想执行自定义数学运算还是以独特的方式操纵事实,自定义 ufunc 都可以简化您的信息处理职责并增强 NumPy 的技能。