简介
在本实验中,我们将探索NumPy通用函数(ufuncs)的基础知识。通用函数是对ndarray按元素进行操作的函数,支持数组广播、类型转换和其他标准特性。我们将学习通用函数的不同方法、广播规则、类型转换规则以及如何覆盖通用函数的行为。
注意:你可以在
08-universal-functions.ipynb
中编写代码。步骤中省略了一些打印操作,你可以根据需要打印输出。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在本实验中,我们将探索NumPy通用函数(ufuncs)的基础知识。通用函数是对ndarray按元素进行操作的函数,支持数组广播、类型转换和其他标准特性。我们将学习通用函数的不同方法、广播规则、类型转换规则以及如何覆盖通用函数的行为。
注意:你可以在
08-universal-functions.ipynb
中编写代码。步骤中省略了一些打印操作,你可以根据需要打印输出。
基本的通用函数对标量进行操作,最简单的例子就是加法运算符。让我们看看如何使用加法运算符按元素对两个数组进行相加。
import numpy as np
## 创建两个数组
arr1 = np.array([0, 2, 3, 4])
arr2 = np.array([1, 1, -1, 2])
## 按元素相加数组
result = arr1 + arr2
## 打印结果
print(result)
输出:
array([1, 3, 2, 6])
通用函数有四种方法:reduce、accumulate、reduceat 和 outer。这些方法对于在数组上执行操作很有用。让我们看看 reduce 方法。
import numpy as np
## 创建一个数组
arr = np.arange(9).reshape(3, 3)
## 沿第一个轴对数组进行规约
result = np.add.reduce(arr, 1)
## 打印结果
print(result)
输出:
array([ 3, 12, 21])
如果并非所有输入参数都是ndarray,通用函数的输出不一定是ndarray。输出类型可以根据输入类型和类型转换规则来确定。让我们看一个例子。
import numpy as np
## 创建一个数组
arr = np.arange(9).reshape(3, 3)
## 执行乘法并指定输出类型
result = np.multiply.reduce(arr, dtype=float)
## 打印结果
print(result)
输出:
array([ 0., 28., 80.])
广播是通用函数的一项强大功能,它允许对形状不同的数组执行操作。广播规则决定了在操作过程中如何处理形状不同的数组。让我们看一个例子。
import numpy as np
## 创建两个数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])
## 将数组相乘
result = arr1 * arr2
## 打印结果
print(result)
输出:
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
当没有为所提供的输入类型实现核心循环时,会对通用函数的输入进行类型转换。转换规则决定了一种数据类型何时可以安全地转换为另一种数据类型。让我们看一个例子。
import numpy as np
## 检查int是否可以安全地转换为float
result = np.can_cast(np.int, np.float)
## 打印结果
print(result)
输出:
True
包括ndarray子类在内的类,可以通过定义某些特殊方法来重写通用函数对它们的作用方式。这允许对通用函数的行为进行定制。让我们看一个例子。
import numpy as np
## 定义一个自定义类
class MyArray(np.ndarray):
def __add__(self, other):
print("Custom add method called")
return super().__add__(other)
## 创建自定义类的一个实例
arr = MyArray([1, 2, 3])
## 执行加法
result = arr + 1
## 打印结果
print(result)
输出:
Custom add method called
[2 3 4]
在本实验中,我们学习了NumPy通用函数(ufuncs)的基础知识。我们探讨了ufuncs的不同方法、广播规则、类型转换规则以及如何重写ufunc行为。ufuncs是对数组高效执行逐元素操作的强大工具。