導航:首頁 > 源碼編譯 > python優化演算法庫

python優化演算法庫

發布時間:2022-05-06 14:30:21

A. 對於python 的科學計算有哪些提高運算速度的技

一:學會正確使用numpy scipy。 numpy scipy寫好的絕不自己寫,比如矩陣運算等操作,pylab的實現還算不錯。各種函數都有,盡量使用他們可以避免初學者大部分的速度不足問題。因為這些函數大部分都是預編譯好的。
根據我幾年前的測試,python的矩陣運算速度並不慢,(因為你運行的是動態鏈接庫裡面的函數而不是腳本)比mathematica快,和matlab持平。
大部分新手不擅長看文檔啥都自己造輪子是不好的。當然老手把效率寫的比開源庫高也不算啥新聞,畢竟有對特定程序的優化
二:減少for的使用,多使用向量化函數,np.vectorlize可以把函數變成對數組逐元素的操作,比for效率高幾個華萊士。
三:對內存友好,操作大矩陣的時候減少會引起整矩陣對此的操作
四:系統最慢的大部分時候是io,包括上面說的內存操作和頻繁的讀入讀出以及debug輸出。避免他們,在需要實時處理的時候引入類似於gpu的pipeline管線機制或者使用靈活的多線程編程可以起到奇效。
五:matplotlib的繪圖效率並不高明,在使用交互繪圖(plt.ion)的時候減少不必要的刷新率。

B. 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的幾乎所有源碼!

C. python人臉識別所用的優化演算法有什麼

python三步實現人臉識別

Face Recognition軟體包

這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。

該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別准確率在《Labled Faces in the world》測試基準下達到了99.38%。

它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作。

特性

在圖片中識別人臉

找到圖片中所有的人臉

這里是一個例子:

1
  • https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_picture
  • D. python 循環內要處理大量數據時怎麼優化

    先嘗試優化程序的時間復雜度,尋找更有效的演算法

    確保了演算法復雜度在可接受范圍之內後,開始進行常數優化,以下是Python優化的幾個小技巧:

    1. 實測表明,for語句一般比while語句效率更高

    2. 同樣實測表明,xrange一般比range要高效

    3. 如果要存儲動態數據(即有可能頻繁變動的數據)少用list和str,多用dict

    4. 實測表明,

      兩個str的連接效率從高到低+=,join,+

      多個str的連接效率從高到低join,+=,+

    5. 盡可能使用列表解析表達式和生成器表達式代替循環一遍來構建list

    6. 避免使用global關鍵字,無論是從代碼效率還是可移植性的方面考慮

    E. Python 中有哪些性能優化方法

    合理使用與deep
    對於dict和list等數據結構的對象,直接賦值使用的是引用的方式。
    而有些情況下需要復制整個對象,這時可以使用包里的和deep,這兩個函數的不同之處在於後者是遞歸復制的。

    F. Python科學計算常用的工具包有哪些

    1、 NumPy


    NumPy幾乎是一個無法迴避的科學計算工具包,最常用的也許是它的N維數組對象,其他還包括一些成熟的函數庫,用於整合C/C++和Fortran代碼的工具包,線性代數、傅里葉變換和隨機數生成函數等。NumPy提供了兩種基本的對象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray是存儲單一數據類型的多維數組,而ufunc則是能夠對數組進行處理的函數。


    2、SciPy:Scientific Computing Tools for Python


    “SciPy是一個開源的Python演算法庫和數學工具包,SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。其功能與軟體MATLAB、Scilab和GNU Octave類似。 Numpy和Scipy常常結合著使用,Python大多數機器學習庫都依賴於這兩個模塊。”—-引用自“Python機器學習庫”


    3、 Matplotlib


    matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地進行制圖。而且也可以方便地將它作為繪圖控制項,嵌入GUI應用程序中。Matplotlib可以配合ipython shell使用,提供不亞於Matlab的繪圖體驗,總之用過了都說好。


    關於Python科學計算常用的工具包有哪些,環球青藤小編就和大家分享到這里了,學習是永無止境的,學習一項技能更是受益終身,所以,只要肯努力學,什麼時候開始都不晚。如果您還想繼續了解關於python編程的學習方法及素材等內容,可以點擊本站其他文章學習。

    G. python有沒有簡單的遺傳演算法庫

    首先遺傳演算法是一種優化演算法,通過模擬基因的優勝劣汰,進行計算(具體的演算法思路什麼的就不贅述了)。大致過程分為初始化編碼、個體評價、選擇,交叉,變異。

    以目標式子 y = 10 * sin(5x) + 7 * cos(4x)為例,計算其最大值

    首先是初始化,包括具體要計算的式子、種群數量、染色體長度、交配概率、變異概率等。並且要對基因序列進行初始化

    [python]view plain

    H. 使用流行的遺傳演算法python庫是哪個

    建議使用由華南農業大學、暨南大學、華南理工大學高校碩博學生聯合團隊推出的Python高性能遺傳和進化演算法工具箱:Geatpy。它是目前進化計算領域與platemo、matlab遺傳演算法工具箱等有相當的權威和影響力的高性能實用型進化演算法工具箱,而其效率和易用性居於領先地位。

    目前已得到多所高校研究生實驗室以及企業採用,為相關領域的研究和應用注入了全新的活力。

    它支持GA、DE、ES等進化演算法,支持單目標、多目標進化優化、復雜約束優化等問題的求解,提供豐富的遺傳演算法和多目標進化優化演算法模板,採用高性能的C內核和mkl矩陣運算,提供功能強大的開源進化演算法框架,尤其適合數學建模和研究進化演算法的研究生們。

    官網:Geatpy

    多目標優化求解案例:

    使用方法:

    第一步:實例化一個問題類把待優化的問題寫在裡面。

    第二步:編寫執行腳本調用遺傳或其他進化演算法模板,完成問題的求解。

    官網教程:Geatpy教程

    I. 有沒有可以並行計算的python科學計算庫

    因為我的程序中需要並行的是優化計算的evaluation部分,所以如果能夠找到一些支持並行優化的庫就可以。
    從python官網上,可以找到一個DEAP庫(git上有),利用map進行並行計算。
    這個庫的優點是,documents和例子是非常詳細的。很多函數,用戶可以根據自己的需求修改,介面還是很好用的。
    DEAP中是通過調用了一個scoop庫(git上有)中的map函數來進行並行計算的。
    如果你的項目不是優化,可以直接用scoop來做並行計算,scoop的documents也是蠻詳細的。

    J. 用python處理一個1G左右的數據集,運行速度非常慢,怎樣優化

    給你幾點個人的建議哈:

    考慮拿C或C++重寫.

    考慮並行搞,找個hadoop集群,寫成maprece程序跑 放在hadoop上跑,更多數據都不怕.

    考慮升級機器,多搞點內存,然後東西盡量放在內存里搞.

    考慮程序優化.

    希望可以幫助到你哦,這只是我的一個建議哈!

    閱讀全文

    與python優化演算法庫相關的資料

    熱點內容
    噴油螺桿製冷壓縮機 瀏覽:579
    python員工信息登記表 瀏覽:377
    高中美術pdf 瀏覽:161
    java實現排列 瀏覽:513
    javavector的用法 瀏覽:982
    osi實現加密的三層 瀏覽:233
    大眾寶來原廠中控如何安裝app 瀏覽:916
    linux內核根文件系統 瀏覽:243
    3d的命令面板不見了 瀏覽:526
    武漢理工大學伺服器ip地址 瀏覽:149
    亞馬遜雲伺服器登錄 瀏覽:525
    安卓手機如何進行文件處理 瀏覽:71
    mysql執行系統命令 瀏覽:930
    php支持curlhttps 瀏覽:143
    新預演算法責任 瀏覽:444
    伺服器如何處理5萬人同時在線 瀏覽:251
    哈夫曼編碼數據壓縮 瀏覽:426
    鎖定伺服器是什麼意思 瀏覽:385
    場景檢測演算法 瀏覽:617
    解壓手機軟體觸屏 瀏覽:350