import numpy as np
一、介绍
使用frompyfunc或者vectorize可以将计算单个元素的函数转换成对数组中每个元素的ufunc函数
二、frompyfunc
定义一个计算单个元素的函数
# triangle_wave()是一个将x值转换成三角波上对应的y值
def triangle_wave(x,c,c0,hc):
x = x - int(x)
if x >= c: r =0.0
elif x< c0: r = x/c0*hc
else: r = (c-x)/(c-c0)*hc
return r
通过列表推导依次调用triangle_wave计算单个x值对应的y值
x = np.linspace(0,2,1000)
y1 = np.array([triangle_wave(t,0.6,0.4,1.0) for t in x])
使用frompyfunc(func,nin,nout)将单值计算函数转换成数组计算函数,其中func是单值计算函数,nin是func的输入参数的个数,nout是func的返回值的个数
triangle_ufunc1 = np.frompyfunc(triangle_wave,4,1)
y2 = triangle_ufunc1(x,0.6,0.4,1.0)
由np.frompyfunc()转换的函数返回值是object,故需要显式将其类型转换为np.float
print(y2.dtype)
print(y2.astype(np.float).dtype)
object
float64
三、vectorize
vectorize()类似于frompyfunc(),只不过可以通过otypes指定返回的数组的元素类型
triangle_ufunc2 = np.vectorize(triangle_wave,otypes=[np.float])
y3 = triangle_ufunc2(x,0.6,0.4,1.0)
print(y3.dtype)
float64