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模塊可以提高運算速度