from scipy.optimize import fmin

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出瀾滄免費(fèi)做網(wǎng)站回饋大家。
def myfunc(x):
return x**2-4*x+8
print fmin(myfunc, 0)
def myfunc(p):
x, y = p
return x**2+y**2+8
print fmin(myfunc, (1, 1))
復(fù)制代碼
fmin的第一個(gè)參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)的參數(shù)是一個(gè)數(shù)組,數(shù)組中每個(gè)元素是一個(gè)變量,因此對(duì)于多元函數(shù),需要在myfunc內(nèi)部將數(shù)組的內(nèi)容展開(kāi)。
一、概觀scipy中的optimize子包中提供了常用的最優(yōu)化算法函數(shù)實(shí)現(xiàn)。我們可以直接調(diào)用這些函數(shù)完成我們的優(yōu)化問(wèn)題。optimize中函數(shù)最典型的特點(diǎn)就是能夠從函數(shù)名稱上看出是使用了什么算法。下面optimize包中函數(shù)的概覽:1.非線性最優(yōu)化fmin -- 簡(jiǎn)單Nelder-Mead算法fmin_powell -- 改進(jìn)型Powell法fmin_bfgs -- 擬Newton法fmin_cg -- 非線性共軛梯度法fmin_ncg -- 線性搜索Newton共軛梯度法leastsq -- 最小二乘2.有約束的多元函數(shù)問(wèn)題fmin_l_bfgs_b ---使用L-BFGS-B算法fmin_tnc ---梯度信息fmin_cobyla ---線性逼近fmin_slsqp ---序列最小二乘法nnls ---解|| Ax - b ||_2 for x=03.全局優(yōu)化anneal ---模擬退火算法brute --強(qiáng)力法4.標(biāo)量函數(shù)fminboundbrentgoldenbracket5.擬合curve_fit-- 使用非線性最小二乘法擬合6.標(biāo)量函數(shù)求根brentq ---classic Brent (1973)brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出這個(gè)算法的人名bisect ---二分法newton ---牛頓法fixed_point7.多維函數(shù)求根fsolve ---通用broyden1 ---Broyden’s first Jacobian approximation.broyden2 ---Broyden’s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixingexcitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.實(shí)用函數(shù)line_search ---找到滿足強(qiáng)Wolfe的alpha值check_grad ---通過(guò)和前向有限差分逼近比較檢查梯度函數(shù)的正確性二、實(shí)戰(zhàn)非線性最優(yōu)化fmin完整的調(diào)用形式是:fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不過(guò)我們最常使用的就是前兩個(gè)參數(shù)。一個(gè)描述優(yōu)化問(wèn)題的函數(shù)以及初值。后面的那些參數(shù)我們也很容易理解。如果您能用到,請(qǐng)自己研究。下面研究一個(gè)最簡(jiǎn)單的問(wèn)題,來(lái)感受這個(gè)函數(shù)的使用方法:f(x)=x**2-4*x+8,我們知道,這個(gè)函數(shù)的最小值是4,在x=2的時(shí)候取到。from scipy.optimize import fmin #引入優(yōu)化包def myfunc(x):return x**2-4*x+8 #定義函數(shù)x0 = [1.3] #猜一個(gè)初值xopt = fmin(myfunc, x0) #求解print xopt #打印結(jié)果運(yùn)行之后,給出的結(jié)果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]程序準(zhǔn)確的計(jì)算得出了最小值,不過(guò)最小值點(diǎn)并不是嚴(yán)格的2,這應(yīng)該是由二進(jìn)制機(jī)器編碼誤差造成的。除了fmin_ncg必須提供梯度信息外,其他幾個(gè)函數(shù)的調(diào)用大同小異,完全類似。我們不妨做一個(gè)對(duì)比:from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):return x**2-4*x+8x0 = [1.3]xopt1 = fmin(myfunc, x0)print xopt1printxopt2 = fmin_powell(myfunc, x0)print xopt2printxopt3 = fmin_bfgs(myfunc, x0)print xopt3printxopt4 = fmin_cg(myfunc,x0)print xopt4給出的結(jié)果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 531.99999999997Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 12Gradient evaluations: 4[ 2.00000001]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 15Gradient evaluations: 5[ 2.]我們可以根據(jù)給出的消息直觀的判斷算法的執(zhí)行情況。每一種算法數(shù)學(xué)上的問(wèn)題,請(qǐng)自己看書學(xué)習(xí)。個(gè)人感覺(jué),如果不是純研究數(shù)學(xué)的工作,沒(méi)必要搞清楚那些推導(dǎo)以及定理云云。不過(guò),必須了解每一種算法的優(yōu)劣以及能力所及。在使用的時(shí)候,不妨多種算法都使用一下,看看效果分別如何,同時(shí),還可以互相印證算法失效的問(wèn)題。在from scipy.optimize import fmin之后,就可以使用help(fmin)來(lái)查看fmin的幫助信息了。幫助信息中沒(méi)有例子,但是給出了每一個(gè)參數(shù)的含義說(shuō)明,這是調(diào)用函數(shù)時(shí)候的最有價(jià)值參考。有源碼研究癖好的,或者當(dāng)你需要改進(jìn)這些已經(jīng)實(shí)現(xiàn)的算法的時(shí)候,可能需要查看optimize中的每種算法的源代碼。在這里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聰明的你肯定發(fā)現(xiàn)了,順著這個(gè)鏈接往上一級(jí)、再往上一級(jí),你會(huì)找到scipy的幾乎所有源碼!
Python內(nèi)置函數(shù)有很多,為大家推薦5個(gè)神仙級(jí)的內(nèi)置函數(shù):
(1)Lambda函數(shù)
用于創(chuàng)建匿名函數(shù),即沒(méi)有名稱的函數(shù)。它只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來(lái)執(zhí)行單個(gè)操作并且可以在一行中編寫時(shí),就可以用到匿名函數(shù)了。
Lamdba的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
利用Lamdba函數(shù),往往可以將代碼簡(jiǎn)化許多。
(2)Map函數(shù)
會(huì)將一個(gè)函數(shù)映射到一個(gè)輸入列表的所有元素上,比如我們先創(chuàng)建了一個(gè)函數(shù)來(lái)返回一個(gè)大寫的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。
我們還可以使用匿名函數(shù)lamdba來(lái)配合map函數(shù),這樣可以更加精簡(jiǎn)。
(3)Reduce函數(shù)
當(dāng)需要對(duì)一個(gè)列表進(jìn)行一些計(jì)算并返回結(jié)果時(shí),reduce()是個(gè)非常有用的函數(shù)。舉個(gè)例子,當(dāng)需要計(jì)算一個(gè)整數(shù)列表所有元素的乘積時(shí),即可使用reduce函數(shù)實(shí)現(xiàn)。
它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個(gè)參數(shù),而map接收一個(gè)參數(shù)。
(4)enumerate函數(shù)
用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。
它的兩個(gè)參數(shù),一個(gè)是序列、迭代器或其他支持迭代對(duì)象;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開(kāi)始,也可以自定義計(jì)數(shù)器的起始編號(hào)。
(5)Zip函數(shù)
用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表
當(dāng)我們使用zip()函數(shù)時(shí),如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同。
python版:
def fn(scores):
fmax = max(scores)
fmin = min(scores)
total = sum(scores)
avg = total / (len(scores)-2)
return avg
1.1 例如:print(hex(2))案例
1.2 輸出函數(shù):print(hex(2))
1.3 輸出結(jié)果:0x2
1.4 解析說(shuō)明:返回16進(jìn)制的數(shù)。
2.1 例如:print(chr(10))案例
2.2 輸出函數(shù):print(chr(10))
2.3 輸出結(jié)果:0o12
2.4 解析說(shuō)明:返回當(dāng)前整數(shù)對(duì)應(yīng)的ASCll碼
3.1 例如:print(ord("b"))案例
3.2 輸出函數(shù):print(ord("b"))
3.3 輸出結(jié)果:98
3.4 解析說(shuō)明:返回當(dāng)前ASCll碼的10進(jìn)制數(shù)
4.1 例如:print(chr(97))
4.2 輸出函數(shù):print(chr(97))
4.3 輸出結(jié)果:b
4.4 解析說(shuō)明:返回當(dāng)前ASCll碼的10進(jìn)制數(shù)。
案例一:給你一個(gè)字符串,s = 'hello kitty'
1.1 輸出函數(shù):print(s.capitalize())
1.2 輸出結(jié)果:0x2
1.3 解析說(shuō)明:返回16進(jìn)制的數(shù)。
2.1輸出函數(shù):print(s.replace('kitty','kuang'))
2.2 輸出結(jié)果:hello kuang
2.3 解析說(shuō)明:替換功能,將kitty換成kuang。
2.4 輸出函數(shù):print(s.replace('4','KK'))
2.5 輸出結(jié)果:12KK12KK
2.6 解析說(shuō)明:所有的4都替換成KK
2.7 輸出函數(shù):print(s.replace('4','KK'))
2.8 輸出結(jié)果:12KK12KK124
2.9 解析說(shuō)明:將前兩個(gè)的4替換成go
案例一:給你一個(gè)字符串,ip = '192.168.1.1'
3.1 輸出函數(shù):print(ip.split(','))
3.2 輸出結(jié)果:['192.168.1.1']
3.3 解析說(shuō)明:將字符串分割成列表
案例一:給你一個(gè)字符串,ip = '192.168.1.1'
3.3 輸出函數(shù):print(ip.split(',',2))
3.4 輸出結(jié)果:['192.168.1.1']
3.5 解析說(shuō)明:從第二個(gè)開(kāi)始分割成列表
網(wǎng)站欄目:python函數(shù)fmin Python函數(shù)chr97的值
分享網(wǎng)址:http://chinadenli.net/article12/hpgegc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、用戶體驗(yàn)、關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)