psycopython
❶ 为什么python-psyco模块可以让p'ypython变得更快
PyH 是一个用来生成HTML页面的Python模块,使用面向对象的方式,HTML的标签都会对应一个Python的对象,输出的HTML文档排版良好,易于阅读。
❷ 脚本语言需要解释器才能运行,为什么可以用Python来写Pypy,而且效率比CPython更高呢
但是C因为跟底层过于接近,所以实现JIT解释器有诸多限制。(比如Psyco到项目死亡为止都没能实现出64位的JIT解释器) Pypy则换了另外一种思路。它先实现了一个Python的子集(注意,不是完整的python),叫RPython。然后用RPython去实现了Python的JIT解释器。这个RPython本身,并不依赖运行时解释器,而是直接被翻译成C代码(实际上可以翻译成多种目标代码,如Java、C#等)再进行编译,本质上它是一种编译型语言。所以,用RPython写出来的程序,最终是会被编译成本地代码的,跟C写的没有本质区别。 由于RPython作者强大的优化功力,RPython程序最终编译结果基本等同于C直接写的效率。用这种程序实现出来的JIT解释器,自然也不会慢。而JIT技术,又保证了运行在这个解释器上的Python程序的效率的提升。
❸ 用ReplicatorG进行3D打印,如何配置Python
建议你安装低版本的python,安装python2.6或者2.7版本。另外还建议安装python的psyco模块,该模块可以显着提升python程序的运行速度。
http://wenku..com/view/2fdd2824e2bd960590c6773f.html
❹ Ruby跟Python哪个执行速度更快
嗯。有些人说ruby快些。只是开发快。有些人说python快些。ruby发展的晚些,在某些情况下的确比python快些。不过python底层本身就是C写的。它本身脚本的执行效率相当高。这些差距基本可以忽略不计。
所以一个程序的快慢首先取决于算法。本身的执行速度你可以测试一下,差别不大。ruby在某些领域里开发速度的确挺快的。比如着名的ruby on rail。还的ruby的一些测试工具。python有名的几个程序也多,虽然不是那么划时代的感觉。不过足够用。整体来讲python的使用者多些,支持库也多些。
python以前有一个psyco优化库,后来转化为pypy了。不过还是老版本的psyco好用些。加上那个后,python速度大大提高。再和ruby比,就不好说了。在特定领域,会优化明显。
当初选择ruby还是python方面,还是花了些心思调查的。最后觉着ruby有些“原始”,不够开放与灵活。
语言是一个载体,用来表达程序员的思想,这方面我感觉python更强些。表达能力强。更适合当时的我。所以最后选择了python。
❺ 常用的生物信息学python库有哪些
常用的生物信息学python库:
Tkinter
Python默认的图形界面接口。Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组。
PyGTK
用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的库。
PyQt
用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是Scintillar编辑器类的Qt接口。
wxPython
GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或者对设计要求不高的用户来说,使用Boa Constructor可以方便迅速的进行wxPython的开发)
PIL
python提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。
Psyco
一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。
xmpppy
Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。
PyMedia
用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。
Pmw
Python megawidgets,Python超级GUI组件集,一个在python中利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。
PyXML
用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:
xmlproc: 一个符合规范的XML解析器。Expat: 一个快速的,非验证的XML解析器。还有其他和他同级别的还有 PyHtml PySGML。
PyGame
用于多媒体开发和游戏软件开发的模块。
PyOpenGL
模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。
NumPy、NumArray、SAGE
NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的底层代码使用C来编写,所以速度的优势很明显。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。
MySQLdb
用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。
Sqlite3
用于连接sqlite数据库。
Python-ldap
提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。
smtplib
发送电子邮件。
ftplib
定义了FTP类和一些方法,用以进行客户端的ftp编程。如果想了解ftp协议的详细内容,请参考RFC959。
PyOpenCL
OpenCL的Python接口,通过该模块可以使用GPU实现并行计算。
❻ Python怎么设置条件表达式会提高效率
1.把range全部换成xrange
2.生成器,如 list=(item for item in fp)
3.利用psyco库,提高函数和类的运行效率。
4.字符串拼接:尽量少用“+”的方式,而采用''.join ,还有"%s"%i这样赋值的手段
5.函数的开销很大。尽量把循环放在函数内进行。而不要让每次迭代都调用函数。
6.“前提工作”先做好,比如该赋值,该拼接的,然后再引入到函数中,或者进行下面的循环。
7.尽量使用内置方法,因为内置的是C写的,效率肯定高很多
8.每当要对序列中的内容进行循环处理时,就应当尝试用列表解析来代替它,如:[i for i in xrang(10) if i%2==0]
9.学会使用itertools模块。当python中添加了迭代器后,就为常见模式提供了一个新的模块,因为它是以C语言编写,所以提供了最高效的迭代器。
--多记录一些。列表,字符串,字典,xrange,类文件对象,这些都是可迭代对象,换句话说,都可以直接用在for循环中进行迭代,如for item in open('1.txt')
--直接使用速度会快。另外,我对比了itertools里工具和xrange,比如都循环100000次打印数字,使用islice(count(),100000)均要比xrange(100000)快
--而xrange还要比range快。
10.用列表解析取代for循环。列表解析的效率等于或高于map。
11.垃圾回收机制,会对列表的操作有重大影响,如列表的append,或者列表解析。import gc,然后在数据载入模块前gc.disable(),结束后再gc.enable()。
❼ Python对比Matlab,有什么决定性的优势
Python的优势:
Python相对于Matlab最大的优势:免费。但既然你已经能用上Matlab,想必不在乎这个了。
Python次大的优势:开源。你可以大量更改科学计算的算法细节。
可移植性,Matlab必然不如Python。但你主要做Research,这方面需求应当不高。
第三方生态,Matlab不如Python。比如3D的绘图工具包,比如GUI,比如更方便的并行,使用GPU,Functional等等。长期来看,Python的科学计算生态会比Matlab好。
语言更加优美。另外如果有一定的OOP需求,构建较大一点的科学计算系统,直接用Python比用Matlab混合的方案肯定要简洁不少。
毕竟是通用的编程语言,做做Web,搞个爬虫,编个脚本,写个小工具啥的用处广。要说非得用Matlab干么也成,只是……
Community. 既然你们实验室用Matlab,说明搞你们这个领域的大部分学者可能都用Matlab。交流起来必然更加方便。
Simulink, 只能说这是个良心作品,不过题主好像用不着……
Matlab本来号称更快,但实际上由于Python越来越完善的生态,这个优势已经逐渐丧失了。这里有一个迭代有限差分法计算2D拉普拉斯方程的对比(500x500的grid,100次迭代),可以参考一下。
Legacy优势。你以前的代码都是Matlab写的,自己Matlab用的也熟,换成新的话,总得看一堆书吧,总得出一堆bug吧,总得踩一堆坑吧。这段时间也是Matlab的优势。或许本来这段时间可以再出一些活呢。毕竟目的是Research,这些工具都是帮忙验证idea的罢了。
Matlab的优势:
Type of solution : Time taken (sec)
Python (estimate) : 1500.0
Python + Psyco (estimate) : 1138.0
Python + NumPy Expression : 29.3
Blitz : 9.5
Inline : 4.3
Fast Inline : 2.3
Python/Fortran : 2.9
Pyrex : 2.5
Matlab (estimate) : 29.0
Octave (estimate) : 60.0
Pure C++ : 2.16
数据来自PerformancePython -
❽ Python的GIL是什么以及多线程性能究竟如何
首先需要明确点GIL并Python特性实现Python解析器(CPython)所引入概念比C++套语言(语)标准用同编译器编译执行代码名编译器例GCCINTEL C++Visual C++等Python同段代码通CPythonPyPyPsyco等同Python执行环境执行像其JPython没GILCPython部环境默认Python执行环境所概念CPythonPython想GIL归结Python语言缺陷所要先明确点:GIL并Python特性Python完全依赖于GIL
流)表示。电流I的单位是:国际单位是:安培
❾ kmeans算法用Python怎么实现
frommathimportpi,sin,cos
fromrandomimportrandom,choice
fromimporttry:
importpsyco
psyco.full()
exceptImportError:
pass
FLOAT_MAX=1e100
classPoint:
__slots__=["x","y","group"]
def__init__(self,x=0.0,y=0.0,group=0):
self.x,self.y,self.group=x,y,group
defgenerate_points(npoints,radius):
points=[Point()for_inxrange(npoints)]
#note:thisisnotauniform2-ddistribution
forpinpoints:
r=random()*radius
ang=random()*2*pi
p.x=r*cos(ang)
p.y=r*sin(ang)
returnpoints
defnearest_cluster_center(point,cluster_centers):
""""""
defsqr_distance_2D(a,b):
return(a.x-b.x)**2+(a.y-b.y)**2
min_index=point.group
min_dist=FLOAT_MAX
fori,ccinenumerate(cluster_centers):
d=sqr_distance_2D(cc,point)
ifmin_dist>d:
min_dist=d
min_index=i
return(min_index,min_dist)
'''
points是数据点,nclusters是给定的簇类数目
cluster_centers包含初始化的nclusters个中心点,开始都是对象->(0,0,0)
'''
defkpp(points,cluster_centers):
cluster_centers[0]=(choice(points))#随机选取第一个中心点
d=[0.0for_inxrange(len(points))]#列表,长度为len(points),保存每个点离最近的中心点的距离
foriinxrange(1,len(cluster_centers)):#i=1...len(c_c)-1
sum=0
forj,pinenumerate(points):
d[j]=nearest_cluster_center(p,cluster_centers[:i])[1]#第j个数据点p与各个中心点距离的最小值
sum+=d[j]
sum*=random()
forj,diinenumerate(d):
sum-=di
ifsum>0:
continue
cluster_centers[i]=(points[j])
break
forpinpoints:
p.group=nearest_cluster_center(p,cluster_centers)[0]
'''
points是数据点,nclusters是给定的簇类数目
'''
deflloyd(points,nclusters):
cluster_centers=[Point()for_inxrange(nclusters)]#根据指定的中心点个数,初始化中心点,均为(0,0,0)
#callk++init
kpp(points,cluster_centers)#选择初始种子点
#下面是kmeans
lenpts10=len(points)>>10
changed=0
whileTrue:
#
forccincluster_centers:
cc.x=0
cc.y=0
cc.group=0
forpinpoints:
cluster_centers[p.group].group+=1#与该种子点在同一簇的数据点的个数
cluster_centers[p.group].x+=p.x
cluster_centers[p.group].y+=p.y
forccincluster_centers:#生成新的中心点
cc.x/=cc.group
cc.y/=cc.group
#
changed=0#记录所属簇发生变化的数据点的个数
forpinpoints:
min_i=nearest_cluster_center(p,cluster_centers)[0]
ifmin_i!=p.group:
changed+=1
p.group=min_i
#stopwhen99.9%ofpointsaregood
ifchanged<=lenpts10:
break
fori,ccinenumerate(cluster_centers):
cc.group=i
returncluster_centers
defprint_eps(points,cluster_centers,W=400,H=400):
Color=namedtuple("Color","rgb");
colors=[]
foriinxrange(len(cluster_centers)):
colors.append(Color((3*(i+1)%11)/11.0,
(7*i%11)/11.0,
(9*i%11)/11.0))
max_x=max_y=-FLOAT_MAX
min_x=min_y=FLOAT_MAX
forpinpoints:
ifmax_x<p.x:max_x=p.x
ifmin_x>p.x:min_x=p.x
ifmax_y<p.y:max_y=p.y
ifmin_y>p.y:min_y=p.y
scale=min(W/(max_x-min_x),
H/(max_y-min_y))
cx=(max_x+min_x)/2
cy=(max_y+min_y)/2
print"%%!PS-Adobe-3.0 %%%%BoundingBox:-5-5%d%d"%(W+10,H+10)
print("/l{rlineto}def/m{rmoveto}def "+
"/c{.25subexch.25subexch.50360arcfill}def "+
"/s{moveto-20m22l2-2l-2-2lclosepath"+
""+
"}def")
fori,ccinenumerate(cluster_centers):
print("%g%g%gsetrgbcolor"%
(colors[i].r,colors[i].g,colors[i].b))
forpinpoints:
ifp.group!=i:
continue
print("%.3f%.3fc"%((p.x-cx)*scale+W/2,
(p.y-cy)*scale+H/2))
print(" 0setgray%g%gs"%((cc.x-cx)*scale+W/2,
(cc.y-cy)*scale+H/2))
print" %%%%EOF"
defmain():
npoints=30000
k=7##clusters
points=generate_points(npoints,10)
cluster_centers=lloyd(points,k)
print_eps(points,cluster_centers)
main()
❿ 请问,使用python如何缩短程序的运行时间
传说有一个PSYCO模块可以提高运算速度