當前位置:首頁 » 編程語言 » python優化

python優化

發布時間: 2022-02-01 06:59:40

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優化的幾個小技巧:

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

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

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

  4. 實測表明,

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

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

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

  6. 避免使用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、目標伺服器的帶寬上限限制 這么做的話你的爬蟲就成了攻擊了不討論----以下內容常規的爬蟲可能不會涉

熱點內容
群輝存儲伺服器 發布:2025-01-11 00:50:19 瀏覽:428
如何用js腳本 發布:2025-01-11 00:47:32 瀏覽:887
日誌和資料庫 發布:2025-01-11 00:47:24 瀏覽:126
windows配置ftp 發布:2025-01-11 00:35:02 瀏覽:657
des演算法代碼c 發布:2025-01-11 00:33:42 瀏覽:806
共享文件夾設置密碼無法訪問 發布:2025-01-11 00:32:49 瀏覽:479
槽鋼演算法 發布:2025-01-11 00:26:21 瀏覽:885
linux命令包 發布:2025-01-10 23:54:26 瀏覽:33
python輪廓 發布:2025-01-10 23:49:23 瀏覽:179
思科配置線怎麼選 發布:2025-01-10 23:48:44 瀏覽:705