要在NumPy中创建自己的通用函数(ufunc
),需要使用numpy.frompyfunc
或numpy.vectorize
函数。
1. 使用numpy.frompyfunc函数创建通用函数
numpy.frompyfunc(func, nin, nout)
根据现有的Python函数创建通用函数。
- 参数说明:
- func:Python函数,即将Python函数转化为通用函数。
- nin:通用函数的输入参数数量。
- nout:通用函数的输出参数数量。
- 返回值:
- 返回的是一个通用函数对象。
示例一:将两个数字相加
import numpy as np
def add_num(x, y)
return x + y
# 将Python函数转化为NumPy通用函数
add_func = np.frompyfunc(add_num, 2, 1)
# 使用通用函数计算两个数组中的每个元素之和
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = add_func(a, b)
print(c)
示例二:对每个数组元素求平方根
import numpy as np
def sqrt_num(x):
return np.sqrt(x)
# 将Python函数转化为NumPy通用函数
sqrt_func = np.frompyfunc(sqrt_num, 1, 1)
# 使用通用函数计算一个数组中每个元素的平方根
a = np.array([1, 4, 9])
b = sqrt_func(a)
print(b)
2. 使用numpy.vectorize函数创建通用函数
numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)
将标量Python函数转化为NumPy通用函数。
- 参数说明:
- pyfunc:Python函数。
- otypes:通用函数的输出类型。
- 返回值:
- 返回的是一个通用函数对象。
示例三:计算一个数组中每个元素的正弦值
import numpy as np
# 定义一个计算正弦函数
def sin_num(x):
return np.sin(x)
# 将Python函数转化为NumPy通用函数
sin_func = np.vectorize(sin_num)
# 使用通用函数计算一个数组中每个元素的sin值
a = np.array([0, np.pi/2, np.pi])
b = sin_func(a)
print(b)
示例四:将每个数组中的元素转换为字符串类型
import numpy as np
# 定义一个转换为字符串类型的函数
def str_num(x):
return str(x)
# 将Python函数转化为NumPy通用函数
str_func = np.vectorize(str_num)
# 使用通用函数将一个数组中的所有元素转换为字符串类型
a = np.array([1, 2, 3])
b = str_func(a)
print(b)