通用函数的输入是一组标量, 输出也是一组标量, 它们通常可以对应于基本数学运算, 如加、 减、乘、除等。如常用函数中的add,subtract,mutlipy等都是通用性的函数
#frompyfunc 创建自己的通用函数
我们可以使用NumPy中的frompyfunc 函数,通过一个Python函数来创建通用函数, 步骤如下
语法:np.frompyfunc(func,nin,nout)
func :定义的函数名称
nin : 函数的参数个数
nout:函数的返回参数个数
(1).创建一个函数,定义好参数及返回值
def answer(arg1,arg2)
return arg1,arg2+arg1
(2).使用frompyfunc创建通用函数
ufunc = np.frompyfunc(answer,2, 2)
(2).调用通用函数
ufunc(1,2) #输出1,3
整体代码如下
#coding=utf-8
'''
创建通用函数及调用通用函数
'''
import numpy as np
def answer(arg1,arg2):
return arg1,arg2+arg1
ufunc = np.frompyfunc(answer,2, 2)
print 'The answer',ufunc(1,2)
#通用函数的方法
其实通用函数并非真正的函数,而是能够表示函数的对象。
通用函数有四个方法,不过这些方法只对输入两个参数、输出一个参数的ufunc对象有效,例如 add 函数。其他不符合条件的ufunc对象调用这些方法时将抛出 ValueError 异常。因此只能 在二元通用函数上调用这些方法。以下将逐一介绍这4个方法
##reduce
作用:沿着指定的轴,在连续的数组元素之间递归调用通用函数,即可得到输入数组的规约(reduce)计算结果
例如:对于add函数而言对数组的reduce计算结果等价于对数组元素求和;而对于subtrac函数而言则是其对数组的reduce计算结果等价于对数组元素减法
示例:使用自己创建的通用函数以及numpy的add函数实现数组内的元素的累计和
#coding=utf-8
'''
创建通用函数
使用通用函数方法
'''
import numpy as np
def answer_tow(arg1,arg2):
return arg1+arg2
ufunc2=np.frompyfunc(answer_tow,2,1)
#使用reduce方法
arr1=np.arange(4)
print arr1
print np.add.reduce(arr1) #输出6
print np.subtract.reduce(arr1) #输出-6
#在自己创建的通用户函数上使用reduce方法
print ufunc2.reduce(arr1) #输出6
#accumulate
accumulate 方法同样可以递归作用于输入数组。但是与 reduce 方法不同的是,它将存 储运算的中间结果并返回。因此在 add 函数上调用 accumulate 方法,等价于直接调用 cumsum 函 数
示例:
import numpy as np
arr1=np.arange(4)
#使用accumulate
print '直接调用cumsum的结果=',arr1.cumsum() #输出直接调用cumsum的结果= [0 1 3 6]
print '使用accumulate的结果=',np.add.accumulate(arr1) 使用accumulate的结果= [0 1 3 6]
#reduceat
该方法解释起来有点复杂,还没有搞清楚
#outer
方法返回一个数组,它的秩(rank)等于两个输入数组的秩的和。它会作用于两个输入数组之间存在的所有元素对
示例:
import numpy as np
arr1=np.arange(4)
arr2=np.arange(3)
print arr2
print arr1
print "Outer", np.add.outer(arr2, arr1)