python优化
1. python 中有哪些性能优化方法
合理使用与deep
对于dict和list等数据结构的对象,直接赋值使用的是引用的方式。
而有些情况下需要复制整个对象,这时可以使用包里的和deep,这两个函数的不同之处在于后者是递归复制的。
2. python 3.X循环优化
importitertools
foriinlist(itertools.combinations(range(1,20),5)):
print(i)
3. Python怎么做最优化
一、概观
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>=0
3.全局优化
anneal ---模拟退火算法
brute --强力法
4.标量函数
fminbound
brent
golden
bracket
5.拟合
curve_fit-- 使用非线性最小二乘法拟合
6.标量函数求根
brentq ---classic Brent (1973)
brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出这个算法的人名
bisect ---二分法
newton ---牛顿法
fixed_point
7.多维函数求根
fsolve ---通用
broyden1 ---Broyden’s first Jacobian approximation.
broyden2 ---Broyden’s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixing
excitingmixing ---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.000000
Iterations: 16
Function 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+8
x0 = [1.3]
xopt1 = fmin(myfunc, x0)
print xopt1
print
xopt2 = fmin_powell(myfunc, x0)
print xopt2
print
xopt3 = fmin_bfgs(myfunc, x0)
print xopt3
print
xopt4 = fmin_cg(myfunc,x0)
print xopt4
给出的结果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 53
1.99999999997
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 12
Gradient evaluations: 4
[ 2.00000001]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 15
Gradient evaluations: 5
[ 2.]
我们可以根据给出的消息直观的判断算法的执行情况。每一种算法数学上的问题,请自己看书学习。个人感觉,如果不是纯研究数学的工作,没必要搞清楚那些推导以及定理云云。不过,必须了解每一种算法的优劣以及能力所及。在使用的时候,不妨多种算法都使用一下,看看效果分别如何,同时,还可以互相印证算法失效的问题。
在from scipy.optimize import fmin之后,就可以使用help(fmin)来查看fmin的帮助信息了。帮助信息中没有例子,但是给出了每一个参数的含义说明,这是调用函数时候的最有价值参考。
有源码研究癖好的,或者当你需要改进这些已经实现的算法的时候,可能需要查看optimize中的每种算法的源代码。在这里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聪明的你肯定发现了,顺着这个链接往上一级、再往上一级,你会找到scipy的几乎所有源码!
4. python 循环内要处理大量数据时怎么优化
先尝试优化程序的时间复杂度,寻找更有效的算法
确保了算法复杂度在可接受范围之内后,开始进行常数优化,以下是Python优化的几个小技巧:
实测表明,for语句一般比while语句效率更高
同样实测表明,xrange一般比range要高效
如果要存储动态数据(即有可能频繁变动的数据)少用list和str,多用dict
实测表明,
两个str的连接效率从高到低+=,join,+
多个str的连接效率从高到低join,+=,+
尽可能使用列表解析表达式和生成器表达式代替循环一遍来构建list
避免使用global关键字,无论是从代码效率还是可移植性的方面考虑
5. 这段python代码如何优化
第一:不需要定义main函数,直接写就好。
第二:代码的逻辑也是有问题的。一般来说,按这样的框架去写:
_size, _verbs, A, s = [int(_) for _ in imput().split(' ')], [], ''
for _ in range(_size): A.append(...) # 读入矩阵所有行
def G:
....实现特征函数G
for _ in range(_verbs):
....verb = [int(_) for _ in imput().split(' ')]
.... if verb[0] = 1:
........行翻转
....elif verb[0] = 2:
........列翻转
....else:
........s += G()
print(s)
6. 如何用python实现Markowitz投资组合优化
该理论基于用均值和方差来表述组合的优劣的前提。将选取几只股票,用蒙特卡洛模拟初步探究组合的有效前沿。
通过最大Sharpe和最小方差两种优化来找到最优的资产组合配置权重参数。
最后,刻画出可能的分布,两种最优以及组合的有效前沿。
7. python运行速度慢怎么办
yxhtest7772017-07-18
关注
分享
697 2
python运行速度慢怎么办?6个Python性能优化技巧
Python是一门非常酷的语言,因为很少的Python代码可以在短时间内做很多事情,并且,Python很容易就能支持多任务和多重处理。
Python的批评者声称Python性能低效、执行缓慢,但实际上并非如此:尝试以下6个小技巧,可以加快Python应用程序。
关键代码可以依赖于扩展包
Python使许多编程任务变得简单,但是对于很关键的任务并不总是提供最好的性能。使用C、C++或者机器语言扩展包来执行关键任务能极大改善性能。这些包是依赖于平台的,也就是说,你必须使用特定的、与你使用的平台相关的包。简而言之,该解决方案提供了一些应用程序的可移植性,以换取性能,您可以获得只有通过直接向底层主机编程。
下面这些扩展包你可以考虑添加到你的个人扩展库中:
Cython
PyInlne
PyPy
Pyrex
这些包有不同的作用和执行方式。例如,Pyrex 让Python处理一些内存任务变得简单高效;PyInline可以直接让你在Python应用程序中使用C代码,虽然内联代码被单独编译,但是如果你能高效的利用C代码,它可以在同一个地方处理每一件事情。
使用关键字排序
有很多古老的Python代码在执行时将花费额外的时间去创建一个自定义的排序函数。最好的排序方式是使用关键字和默认的sort()方法。
优化循环
每一种编程语言都强调循环语句的优化,Python也是一样的。尽管你可以依赖于丰富的技术让循环运行的更快,然而,开发者经常忽略的一个方法是避免在循环内部使用点拼接字符串。
使用新版本
任何一个在线上搜索Python资料的人都会发现无数关于Python版本迁移的信息。通常,Python每一个版本都针对之前的一个版本做了优化和改进,以让Python运行的更快。限制因素是你喜欢的函数库是否也针对Python的新版本做了改进。
当你使用了新的函数库,获得了Python的新版本,你需要保证代码依然能够运行,检查应用,修正差异。然后,如果你仅仅是
8. 如何优化python环境web服务器
CGI是最老的WEB技术。使用标准输入输出,直接生成网页。asp与php接近。换成解释输出。jsp,略进一步,基本上与php相近。后面是servlet技术。python支持psp方式。也支持CGI,还支持mod_python(有些象是WEB服务插件),也支持fastcgifastcgi与servlet相似。都需要有一个应用服务器,通过一个端口与web服务器连接。连接协议有多样。最近2年python往往使用wsgi协议。这个似乎比fastcgi更易用。python做web开发还有一种单脚本web服务器。比如bottle,flask等。python也支持多进程方式WEB服务。可以进一步提高并发量。
9. 关于python 代码优化
报的是内存错误,估计是内存不足,循环得到的大量数据最好存入数据库(用的时候再访问数据库获取),而不是直接写入内存。
10. 如何优化 Python 爬虫的速度
从以下的五个方面去进行优化测试:
1、cpu瓶颈的话可以通过分布式的方式来解决 更多的结点去处理分发的任务就好了
2、本地带宽的瓶颈通过云服务器解决(一般都有100MB的方案提供) 定时定量的去购买使用可以节约成本(毕竟不是搜索引擎不会一直开着的)
3、目标服务器的带宽限制(基于IP的)通过跨区的服务器解决 云服务器提供商有多个机房的 分散节点所在的机房可以缓解问题 有提供动态ip的就更好了
4、目标服务器的访问限制,老渔哥提示搜一下<反爬虫>策略就差不多了解了 根据自己的编程能力来应对 给两个库投石问路 SeleniumPhantomJS 对于验证码相关的可以考虑购买服务(有外包的, 最高级别是人肉的一定可以搞定, 量要考虑一下价格不菲)真的不建议自己搞。
目标网站系统比较知名的话(discuz)可以网上搜搜 足够简单的话可以用opencv(有python绑定的版本而且跨平台) thredshold(二值化)处理颜色, eroded/dilate(腐蚀膨胀)处理噪点, findContours(查找轮廓)处理字符分割,穷举旋转和简单扭曲再匹配字库差不多就可以处理2010以前的简单二维码了(当然cpu开销还是很大的)
5、目标服务器的带宽上限限制 这么做的话你的爬虫就成了攻击了不讨论----以下内容常规的爬虫可能不会涉