import numpy as np
x=np.array([[1, 2, 3],[4, 5, 6]])
print x
def testv1(x):
if x>3:
x=x*2
else:
x=-x
return x
mytest=np.frompyfunc(testv1,1,1)
z=mytest(x)
print z
z=z.astype(x.dtype)
print z.dtype
>>>
[[1 2 3]
[4 5 6]]
[[-1 -2 -3]
[8 10 12]]
int32
>>>
使用numpy的自定义ufunc函数
自定义ufunc函数
通过NumPy提供的标准ufunc函数,可以组合出复杂的表达式在C语言级别对数组的每个元素进行计算。但有时这种表达式不易编写,而对每个元素进行计算的程序却很容易用Python实现,这时可以用frompyfunc()将一个计算单个元素的函数转换成ufunc函数。这样就可以方便地用所产生的ufunc函数对数组进行计算了。
通过frompyfunc()可以将计算单个值的函数转换为一个能对数组的每个元素进行计算的ufunc函数。frompyfunc()的调用格式为:
其中func是计算单个元素的函数,nin是func的输入参数的个数,nout是func的返回值个数。
返回的数组的元素类型是object,因此还需要再调用数组的astype()方法将其转换