Skip to content

Latest commit

 

History

History
117 lines (84 loc) · 3.21 KB

ch09_通用函数及通用函数方法.md

File metadata and controls

117 lines (84 loc) · 3.21 KB

通用函数的输入是一组标量, 输出也是一组标量, 它们通常可以对应于基本数学运算, 如加、 减、乘、除等。如常用函数中的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)