重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以使用input()函数 也可以使用raw_input()函数。 举例如下: x = input("x: ") x: 34 y = input("y: ") y: 42 print x * y 1428
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网站空间、营销软件、网站建设、乐安网站维护、网站推广。
此函数将输入的图片从一个颜色域转换到另一个。
input: 以数组形式输入图片
zoom:浮点数或数组。如果是一个浮点数,对每一个轴放缩相同的倍数。如果是一个数组,则对每一个轴分配一个值。
output:输出,默认为None
order:整型(范围0-5)样条插值的顺序,默认为3。详见后续
mode:字符串,包括{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’},输入的数组如何扩展边界,默认为 ‘constant'(具体参考官方文档 插值的边界处理 )
cval:浮点数,当插值的边界处理模式为’constant‘时发挥作用。默认为0.0
prefilter:bool,input输入的数组是否经过一个预样条滤波器,默认为True
设原图 ,
目标图片
设 之比为 , ,则:
设原图坐标上的像素点 ,
目标图片坐标上的像素的为
1.计算目标图片的坐标点对应原图中哪个坐标点,公式为:
2.根据dst_x,dst_y的值四舍五入为整数,填充到目标图片的相应位置。
由上图可以看到,经过转换后的图片出现了锯齿感。
1.计算目标图片的坐标点对应原图中哪个坐标点(此步与最邻近插值算法相同),公式为:
2.由于点 是个浮点数坐标,无法用整型的灰度值或RGB值来表示,因此双线性插值算法通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。
设分解后的坐标为:
首先,在x方向上进行线性插值, 代表该点的像素值。
然后,在y方向上进行线性插值:
得到的 就是该点经过处理后的像素值,填充到目标图片的相应位置。
可见,双线性插值算法的锯齿感要少于最邻近插值法。
三次插值法(cubic interpolation method)是一种 多项式插值法 ,逐次以 三次曲线 φ(t)=a 0 +a 1 t+a 2 t 2 +a 3 t 3 的极小点逼近寻求函数f(t)的极小点的一种方法.(摘自 百度百科 )
可见,三次插值法处理后的图片几乎没有锯齿感
这里指的是麦克劳林级数。
泰勒级数用无限项相加来逼近一个函数。
泰勒级数取x0=0时得到麦克劳林。
通项公式为
按照这个公式写程序即可。
一般加前十项即可,用一个while循环来写。
一、概观scipy中的optimize子包中提供了常用的最优化算法函数实现。我们可以直接调用这些函数完成我们的优化问题。optimize中函数最典型的特点就是能够从函数名称上看出是使用了什么算法。下面optimize包中函数的概览:1.非线性最优化fmin -- 简单Nelder-Mead算法fmin_powell -- 改进型Powell法fmin_bfgs -- 拟Newton法fmin_cg -- 非线性共轭梯度法fmin_ncg -- 线性搜索Newton共轭梯度法leastsq -- 最小二乘2.有约束的多元函数问题fmin_l_bfgs_b ---使用L-BFGS-B算法fmin_tnc ---梯度信息fmin_cobyla ---线性逼近fmin_slsqp ---序列最小二乘法nnls ---解|| Ax - b ||_2 for x=03.全局优化anneal ---模拟退火算法brute --强力法4.标量函数fminboundbrentgoldenbracket5.拟合curve_fit-- 使用非线性最小二乘法拟合6.标量函数求根brentq ---classic Brent (1973)brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出这个算法的人名bisect ---二分法newton ---牛顿法fixed_point7.多维函数求根fsolve ---通用broyden1 ---Broyden’s first Jacobian approximation.broyden2 ---Broyden’s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixingexcitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.实用函数line_search ---找到满足强Wolfe的alpha值check_grad ---通过和前向有限差分逼近比较检查梯度函数的正确性二、实战非线性最优化fmin完整的调用形式是:fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不过我们最常使用的就是前两个参数。一个描述优化问题的函数以及初值。后面的那些参数我们也很容易理解。如果您能用到,请自己研究。下面研究一个最简单的问题,来感受这个函数的使用方法:f(x)=x**2-4*x+8,我们知道,这个函数的最小值是4,在x=2的时候取到。from scipy.optimize import fmin #引入优化包def myfunc(x):return x**2-4*x+8 #定义函数x0 = [1.3] #猜一个初值xopt = fmin(myfunc, x0) #求解print xopt #打印结果运行之后,给出的结果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]程序准确的计算得出了最小值,不过最小值点并不是严格的2,这应该是由二进制机器编码误差造成的。除了fmin_ncg必须提供梯度信息外,其他几个函数的调用大同小异,完全类似。我们不妨做一个对比:from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):return x**2-4*x+8x0 = [1.3]xopt1 = fmin(myfunc, x0)print xopt1printxopt2 = fmin_powell(myfunc, x0)print xopt2printxopt3 = fmin_bfgs(myfunc, x0)print xopt3printxopt4 = fmin_cg(myfunc,x0)print xopt4给出的结果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 531.99999999997Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 12Gradient evaluations: 4[ 2.00000001]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 15Gradient evaluations: 5[ 2.]我们可以根据给出的消息直观的判断算法的执行情况。每一种算法数学上的问题,请自己看书学习。个人感觉,如果不是纯研究数学的工作,没必要搞清楚那些推导以及定理云云。不过,必须了解每一种算法的优劣以及能力所及。在使用的时候,不妨多种算法都使用一下,看看效果分别如何,同时,还可以互相印证算法失效的问题。在from scipy.optimize import fmin之后,就可以使用help(fmin)来查看fmin的帮助信息了。帮助信息中没有例子,但是给出了每一个参数的含义说明,这是调用函数时候的最有价值参考。有源码研究癖好的,或者当你需要改进这些已经实现的算法的时候,可能需要查看optimize中的每种算法的源代码。在这里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聪明的你肯定发现了,顺着这个链接往上一级、再往上一级,你会找到scipy的几乎所有源码!