bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

python優(yōu)化函數(shù) python性能優(yōu)化

學(xué)習(xí)多目標(biāo)優(yōu)化需要掌握哪些python知識

多目標(biāo)優(yōu)化

創(chuàng)新互聯(lián)是一家專業(yè)從事網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計開發(fā)服務(wù)!

目標(biāo)優(yōu)化問題一般地就是指通過一定的優(yōu)化算法獲得目標(biāo)函數(shù)的最優(yōu)化解。當(dāng)優(yōu)化的目標(biāo)函數(shù)為一個時稱之為單目標(biāo)優(yōu)化(Single-

objective Optimization Problem,

SOP)。當(dāng)優(yōu)化的目標(biāo)函數(shù)有兩個或兩個以上時稱為多目標(biāo)優(yōu)化(Multi-objective Optimization Problem,

MOP)。不同于單目標(biāo)優(yōu)化的解為有限解,多目標(biāo)優(yōu)化的解通常是一組均衡解。

多目標(biāo)優(yōu)化算法歸結(jié)起來有傳統(tǒng)優(yōu)化算法和智能優(yōu)化算法兩大類。

1. 傳統(tǒng)優(yōu)化算法包括加權(quán)法、約束法和線性規(guī)劃法等,實(shí)質(zhì)上就是將多目標(biāo)函數(shù)轉(zhuǎn)化為單目標(biāo)函數(shù),通過采用單目標(biāo)優(yōu)化的方法達(dá)到對多目標(biāo)函數(shù)的求解。

2. 智能優(yōu)化算法包括進(jìn)化算法(Evolutionary Algorithm, 簡稱EA)、粒子群算法(Particle Swarm Optimization, PSO)等。

Pareto最優(yōu)解:

若x*∈C*,且在C中不存在比x更優(yōu)越的解x,則稱x*是多目標(biāo)最優(yōu)化模型式的Pareto最優(yōu)解,又稱為有效解。

一般來說,多目標(biāo)優(yōu)化問題并不存在一個最優(yōu)解,所有可能的解都稱為非劣解,也稱為Pareto解。傳統(tǒng)優(yōu)化技術(shù)一般每次能得到Pareo解集中的一個,而

用智能算法來求解,可以得到更多的Pareto解,這些解構(gòu)成了一個最優(yōu)解集,稱為Pareto最優(yōu)解。它是由那些任一個目標(biāo)函數(shù)值的提高都必須以犧牲其

他目標(biāo)函數(shù)值為代價的解組成的集合,稱為Pareto最優(yōu)域,簡稱Pareto集。

Pareto有效(最優(yōu))解非劣解集是指由這樣一些解組成的集合:與集合之外的任何解相比它們至少有一個目標(biāo)函數(shù)比集合之外的解好。

求解多目標(biāo)優(yōu)化問題最有名的就是NSGA-II了,是多目標(biāo)遺傳算法,但其對解的選擇過程可以用在其他優(yōu)化算法上,例如粒子群,蜂群等等。這里簡單介紹一下NSGA-II的選擇算法。主要包含三個部分:

1. 快速非支配排序

要先講一下支配的概念,對于解X1和X2,如果X1對應(yīng)的所有目標(biāo)函數(shù)都不比X2大(最小問題),且存在一個目標(biāo)值比X2小,則X2被X1支配。

快速非支配排序是一個循環(huán)分級過程:首先找出群體中的非支配解集,記為第一非支配層,irank=1(irank是個體i的非支配值),將其從群體中除去,繼續(xù)尋找群體中的非支配解集,然后irank=2。

2. 個體擁擠距離

為了使計算結(jié)果在目標(biāo)空間比較均勻的分布,維持種群多樣性,對每個個體計算擁擠距離,選擇擁擠距離大的個體,擁擠距離的定義為:

L[i]d=L[i]d+(L[i+1]m?L[i?1]m)/(fmaxm?fminm)

L[i+1]m是第i+1個個體的第m目標(biāo)函數(shù)值,fmaxm 和 fminm是集合中第m個目標(biāo)函數(shù)的最大和最小值。

3. 精英策略選擇

精英策略就是保留父代中的優(yōu)良個體直接進(jìn)入子代,防止獲得的Pareto最優(yōu)解丟失。將第t次產(chǎn)生的子代種群和父代種群合并,然后對合并后的新種群進(jìn)行非支配排序,然后按照非支配順序添加到規(guī)模為N的種群中作為新的父代。

如何優(yōu)化python 機(jī)器學(xué)習(xí)庫中的函數(shù)

def do_POST(self):

mpath,margs=urllib.splitquery(self.path)

datas = self.rfile.read(int(self.headers['content-length']))

self.do_action(mpath, datas)

def do_action(self, path, args):

self.outputtxt(path + args )

def outputtxt(self, content):

#指定返回編碼

enc = "UTF-8"

content = content.encode(enc)

f = io.BytesIO()

f.write(content)

f.seek(0)

self.send_response(200)

self.send_header("Content-type", "text/html; charset=%s" % enc)

self.send_header("Content-Length", str(len(content)))

self.end_headers()

shutil.copyfileobj(f,self.wfile)

Python怎么做最優(yōu)化

最優(yōu)化

為什么要做最優(yōu)化呢?因?yàn)樵谏钪?,人們總是希望幸福值或其它達(dá)到一個極值,比如做生意時希望成本最小,收入最大,所以在很多商業(yè)情境中,都會遇到求極值的情況。

函數(shù)求根

這里「函數(shù)的根」也稱「方程的根」,或「函數(shù)的零點(diǎn)」。

先把我們需要的包加載進(jìn)來。import numpy as npimport scipy as spimport scipy.optimize as optimport matplotlib.pyplot as plt%matplotlib inline

函數(shù)求根和最優(yōu)化的關(guān)系?什么時候函數(shù)是最小值或最大值?

兩個問題一起回答:最優(yōu)化就是求函數(shù)的最小值或最大值,同時也是極值,在求一個函數(shù)最小值或最大值時,它所在的位置肯定是導(dǎo)數(shù)為 0 的位置,所以要求一個函數(shù)的極值,必然要先求導(dǎo),使其為 0,所以函數(shù)求根就是為了得到最大值最小值。

scipy.optimize 有什么方法可以求根?

可以用 scipy.optimize 中的 bisect 或 brentq 求根。f = lambda x: np.cos(x) - x # 定義一個匿名函數(shù)x = np.linspace(-5, 5, 1000) # 先生成 1000 個 xy = f(x) # 對應(yīng)生成 1000 個 f(x)plt.plot(x, y); # 看一下這個函數(shù)長什么樣子plt.axhline(0, color='k'); # 畫一根橫線,位置在 y=0

opt.bisect(f, -5, 5) # 求取函數(shù)的根0.7390851332155535plt.plot(x, y)plt.axhline(0, color='k')plt.scatter([_], [0], c='r', s=100); # 這里的 [_] 表示上一個 Cell 中的結(jié)果,這里是 x 軸上的位置,0 是 y 上的位置

求根有兩種方法,除了上面介紹的 bisect,還有 brentq,后者比前者快很多。%timeit opt.bisect(f, -5, 5)%timeit opt.brentq(f, -5, 5)10000 loops, best of 3: 157 s per loopThe slowest run took 11.65 times longer than the fastest. This could mean that an intermediate result is being cached.10000 loops, best of 3: 35.9 s per loop

函數(shù)求最小化

求最小值就是一個最優(yōu)化問題。求最大值時只需對函數(shù)做一個轉(zhuǎn)換,比如加一個負(fù)號,或者取倒數(shù),就可轉(zhuǎn)成求最小值問題。所以兩者是同一問題。

初始值對最優(yōu)化的影響是什么?

舉例來說,先定義個函數(shù)。f = lambda x: 1-np.sin(x)/xx = np.linspace(-20., 20., 1000)y = f(x)

當(dāng)初始值為 3 值,使用 minimize 函數(shù)找到最小值。minimize 函數(shù)是在新版的 scipy 里,取代了以前的很多最優(yōu)化函數(shù),是個通用的接口,背后是很多方法在支撐。x0 = 3xmin = opt.minimize(f, x0).x # x0 是起始點(diǎn),起始點(diǎn)最好離真正的最小值點(diǎn)不要太遠(yuǎn)plt.plot(x, y)plt.scatter(x0, f(x0), marker='o', s=300); # 起始點(diǎn)畫出來,用圓圈表示plt.scatter(xmin, f(xmin), marker='v', s=300); # 最小值點(diǎn)畫出來,用三角表示plt.xlim(-20, 20);

初始值為 3 時,成功找到最小值。

現(xiàn)在來看看初始值為 10 時,找到的最小值點(diǎn)。x0 = 10xmin = opt.minimize(f, x0).xplt.plot(x, y)plt.scatter(x0, f(x0), marker='o', s=300)plt.scatter(xmin, f(xmin), marker='v', s=300)plt.xlim(-20, 20);

由上圖可見,當(dāng)初始值為 10 時,函數(shù)找到的是局部最小值點(diǎn),可見 minimize 的默認(rèn)算法對起始點(diǎn)的依賴性。

那么怎么才能不管初始值在哪個位置,都能找到全局最小值點(diǎn)呢?

如何找到全局最優(yōu)點(diǎn)?

可以使用 basinhopping 函數(shù)找到全局最優(yōu)點(diǎn),相關(guān)背后算法,可以看幫助文件,有提供論文的索引和出處。

我們設(shè)初始值為 10 看是否能找到全局最小值點(diǎn)。x0 = 10from scipy.optimize import basinhoppingxmin = basinhopping(f,x0,stepsize = 5).xplt.plot(x, y);plt.scatter(x0, f(x0), marker='o', s=300);plt.scatter(xmin, f(xmin), marker='v', s=300);plt.xlim(-20, 20);

當(dāng)起始點(diǎn)在比較遠(yuǎn)的位置,依然成功找到了全局最小值點(diǎn)。

如何求多元函數(shù)最小值?

以二元函數(shù)為例,使用 minimize 求對應(yīng)的最小值。def g(X): x,y = X return (x-1)**4 + 5 * (y-1)**2 - 2*x*yX_opt = opt.minimize(g, (8, 3)).x # (8,3) 是起始點(diǎn)print X_opt[ 1.88292611 1.37658521]fig, ax = plt.subplots(figsize=(6, 4)) # 定義畫布和圖形x_ = y_ = np.linspace(-1, 4, 100)X, Y = np.meshgrid(x_, y_)c = ax.contour(X, Y, g((X, Y)), 50) # 等高線圖ax.plot(X_opt[0], X_opt[1], 'r*', markersize=15) # 最小點(diǎn)的位置是個元組ax.set_xlabel(r"$x_1$", fontsize=18)ax.set_ylabel(r"$x_2$", fontsize=18)plt.colorbar(c, ax=ax) # colorbar 表示顏色越深,高度越高fig.tight_layout()

畫3D 圖。from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfig = plt.figure()ax = fig.gca(projection='3d')x_ = y_ = np.linspace(-1, 4, 100)X, Y = np.meshgrid(x_, y_)surf = ax.plot_surface(X, Y, g((X,Y)), rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)cset = ax.contour(X, Y, g((X,Y)), zdir='z',offset=-5, cmap=cm.coolwarm)fig.colorbar(surf, shrink=0.5, aspect=5);

曲線擬合

曲線擬合和最優(yōu)化有什么關(guān)系?

曲線擬合的問題是,給定一組數(shù)據(jù),它可能是沿著一條線散布的,這時要找到一條最優(yōu)的曲線來擬合這些數(shù)據(jù),也就是要找到最好的線來代表這些點(diǎn),這里的最優(yōu)是指這些點(diǎn)和線之間的距離是最小的,這就是為什么要用最優(yōu)化問題來解決曲線擬合問題。

舉例說明,給一些點(diǎn),找到一條線,來擬合這些點(diǎn)。

先給定一些點(diǎn):N = 50 # 點(diǎn)的個數(shù)m_true = 2 # 斜率b_true = -1 # 截距dy = 2.0 # 誤差np.random.seed(0)xdata = 10 * np.random.random(N) # 50 個 x,服從均勻分布ydata = np.random.normal(b_true + m_true * xdata, dy) # dy 是標(biāo)準(zhǔn)差plt.errorbar(xdata, ydata, dy, fmt='.k', ecolor='lightgray');

上面的點(diǎn)整體上呈現(xiàn)一個線性關(guān)系,要找到一條斜線來代表這些點(diǎn),這就是經(jīng)典的一元線性回歸。目標(biāo)就是找到最好的線,使點(diǎn)和線的距離最短。要優(yōu)化的函數(shù)是點(diǎn)和線之間的距離,使其最小。點(diǎn)是確定的,而線是可變的,線是由參數(shù)值,斜率和截距決定的,這里就是要通過優(yōu)化距離找到最優(yōu)的斜率和截距。

點(diǎn)和線的距離定義如下:def chi2(theta, x, y): return np.sum(((y - theta[0] - theta[1] * x)) ** 2)

上式就是誤差平方和。

誤差平方和是什么?有什么作用?

誤差平方和公式為:

誤差平方和大,表示真實(shí)的點(diǎn)和預(yù)測的線之間距離太遠(yuǎn),說明擬合得不好,最好的線,應(yīng)該是使誤差平方和最小,即最優(yōu)的擬合線,這里是條直線。

誤差平方和就是要最小化的目標(biāo)函數(shù)。

找到最優(yōu)的函數(shù),即斜率和截距。theta_guess = [0, 1] # 初始值theta_best = opt.minimize(chi2, theta_guess, args=(xdata, ydata)).xprint(theta_best)[-1.01442005 1.93854656]

上面兩個輸出即是預(yù)測的直線斜率和截距,我們是根據(jù)點(diǎn)來反推直線的斜率和截距,那么真實(shí)的斜率和截距是多少呢?-1 和 2,很接近了,差的一點(diǎn)是因?yàn)橛性胍舻囊?。xfit = np.linspace(0, 10)yfit = theta_best[0] + theta_best[1] * xfitplt.errorbar(xdata, ydata, dy, fmt='.k', ecolor='lightgray');plt.plot(xfit, yfit, '-k');

最小二乘(Least Square)是什么?

上面用的是 minimize 方法,這個問題的目標(biāo)函數(shù)是誤差平方和,這就又有一個特定的解法,即最小二乘。

最小二乘的思想就是要使得觀測點(diǎn)和估計點(diǎn)的距離的平方和達(dá)到最小,這里的“二乘”指的是用平方來度量觀測點(diǎn)與估計點(diǎn)的遠(yuǎn)近(在古漢語中“平方”稱為“二乘”),“最小”指的是參數(shù)的估計值要保證各個觀測點(diǎn)與估計點(diǎn)的距離的平方和達(dá)到最小。

關(guān)于最小二乘估計的計算,涉及更多的數(shù)學(xué)知識,這里不想詳述,其一般的過程是用目標(biāo)函數(shù)對各參數(shù)求偏導(dǎo)數(shù),并令其等于 0,得到一個線性方程組。具體推導(dǎo)過程可參考斯坦福機(jī)器學(xué)習(xí)講義 第 7 頁。def deviations(theta, x, y): return (y - theta[0] - theta[1] * x)theta_best, ier = opt.leastsq(deviations, theta_guess, args=(xdata, ydata))print(theta_best)[-1.01442016 1.93854659]

最小二乘 leastsq 的結(jié)果跟 minimize 結(jié)果一樣。注意 leastsq 的第一個參數(shù)不再是誤差平方和 chi2,而是誤差本身 deviations,即沒有平方,也沒有和。yfit = theta_best[0] + theta_best[1] * xfitplt.errorbar(xdata, ydata, dy, fmt='.k', ecolor='lightgray');plt.plot(xfit, yfit, '-k');

非線性最小二乘

上面是給一些點(diǎn),擬合一條直線,擬合一條曲線也是一樣的。def f(x, beta0, beta1, beta2): # 首先定義一個非線性函數(shù),有 3 個參數(shù) return beta0 + beta1 * np.exp(-beta2 * x**2)beta = (0.25, 0.75, 0.5) # 先猜 3 個 betaxdata = np.linspace(0, 5, 50)y = f(xdata, *beta)ydata = y + 0.05 * np.random.randn(len(xdata)) # 給 y 加噪音def g(beta): return ydata - f(xdata, *beta) # 真實(shí) y 和 預(yù)測值的差,求最優(yōu)曲線時要用到beta_start = (1, 1, 1)beta_opt, beta_cov = opt.leastsq(g, beta_start)print beta_opt # 求到的 3 個最優(yōu)的 beta 值[ 0.25525709 0.74270226 0.54966466]

拿估計的 beta_opt 值跟真實(shí)的 beta = (0.25, 0.75, 0.5) 值比較,差不多。fig, ax = plt.subplots()ax.scatter(xdata, ydata) # 畫點(diǎn)ax.plot(xdata, y, 'r', lw=2) # 真實(shí)值的線ax.plot(xdata, f(xdata, *beta_opt), 'b', lw=2) # 擬合的線ax.set_xlim(0, 5)ax.set_xlabel(r"$x$", fontsize=18)ax.set_ylabel(r"$f(x, \beta)$", fontsize=18)fig.tight_layout()

除了使用最小二乘,還可以使用曲線擬合的方法,得到的結(jié)果是一樣的。beta_opt, beta_cov = opt.curve_fit(f, xdata, ydata)print beta_opt[ 0.25525709 0.74270226 0.54966466]

有約束的最小化

有約束的最小化是指,要求函數(shù)最小化之外,還要滿足約束條件,舉例說明。

邊界約束def f(X): x, y = X return (x-1)**2 + (y-1)**2 # 這是一個碗狀的函數(shù)x_opt = opt.minimize(f, (0, 0), method='BFGS').x # 無約束最優(yōu)化

假設(shè)有約束條件,x 和 y 要在一定的范圍內(nèi),如 x 在 2 到 3 之間,y 在 0 和 2 之間。bnd_x1, bnd_x2 = (2, 3), (0, 2) # 對自變量的約束x_cons_opt = opt.minimize(f, np.array([0, 0]), method='L-BFGS-B', bounds=[bnd_x1, bnd_x2]).x # bounds 矩形約束fig, ax = plt.subplots(figsize=(6, 4))x_ = y_ = np.linspace(-1, 3, 100)X, Y = np.meshgrid(x_, y_)c = ax.contour(X, Y, f((X,Y)), 50)ax.plot(x_opt[0], x_opt[1], 'b*', markersize=15) # 沒有約束下的最小值,藍(lán)色五角星ax.plot(x_cons_opt[0], x_cons_opt[1], 'r*', markersize=15) # 有約束下的最小值,紅色星星bound_rect = plt.Rectangle((bnd_x1[0], bnd_x2[0]), bnd_x1[1] - bnd_x1[0], bnd_x2[1] - bnd_x2[0], facecolor="grey")ax.add_patch(bound_rect)ax.set_xlabel(r"$x_1$", fontsize=18)ax.set_ylabel(r"$x_2$", fontsize=18)plt.colorbar(c, ax=ax)fig.tight_layout()

不等式約束

介紹下相關(guān)理論,先來看下存在等式約束的極值問題求法,比如下面的優(yōu)化問題。

目標(biāo)函數(shù)是 f(w),下面是等式約束,通常解法是引入拉格朗日算子,這里使用 ββ 來表示算子,得到拉格朗日公式為

l 是等式約束的個數(shù)。

然后分別對 w 和ββ 求偏導(dǎo),使得偏導(dǎo)數(shù)等于 0,然后解出 w 和βiβi,至于為什么引入拉格朗日算子可以求出極值,原因是 f(w) 的 dw 變化方向受其他不等式的約束,dw的變化方向與f(w)的梯度垂直時才能獲得極值,而且在極值處,f(w) 的梯度與其他等式梯度的線性組合平行,因此他們之間存在線性關(guān)系。(參考《最優(yōu)化與KKT條件》)

對于不等式約束的極值問題

常常利用拉格朗日對偶性將原始問題轉(zhuǎn)換為對偶問題,通過解對偶問題而得到原始問題的解。該方法應(yīng)用在許多統(tǒng)計學(xué)習(xí)方法中。有興趣的可以參閱相關(guān)資料,這里不再贅述。def f(X): return (X[0] - 1)**2 + (X[1] - 1)**2def g(X): return X[1] - 1.75 - (X[0] - 0.75)**4x_opt = opt.minimize(f, (0, 0), method='BFGS').xconstraints = [dict(type='ineq', fun=g)] # 約束采用字典定義,約束方式為不等式約束,邊界用 g 表示x_cons_opt = opt.minimize(f, (0, 0), method='SLSQP', constraints=constraints).xfig, ax = plt.subplots(figsize=(6, 4))x_ = y_ = np.linspace(-1, 3, 100)X, Y = np.meshgrid(x_, y_)c = ax.contour(X, Y, f((X, Y)), 50)ax.plot(x_opt[0], x_opt[1], 'b*', markersize=15) # 藍(lán)色星星,沒有約束下的最小值ax.plot(x_, 1.75 + (x_-0.75)**4, '', markersize=15)ax.fill_between(x_, 1.75 + (x_-0.75)**4, 3, color="grey")ax.plot(x_cons_opt[0], x_cons_opt[1], 'r*', markersize=15) # 在區(qū)域約束下的最小值ax.set_ylim(-1, 3)ax.set_xlabel(r"$x_0$", fontsize=18)ax.set_ylabel(r"$x_1$", fontsize=18)plt.colorbar(c, ax=ax)fig.tight_layout()

scipy.optimize.minimize 中包括了多種最優(yōu)化算法,每種算法使用范圍不同,詳細(xì)參考官方文檔。

#Python干貨#python實(shí)現(xiàn)——最優(yōu)化算法

函數(shù)詳見rres,此代碼使該算法運(yùn)行了兩次

收獲:

這是我第一個實(shí)現(xiàn)的代碼。學(xué)習(xí)完該算法以后,邏輯框架基本上就有了,剩下需要明確的就是對應(yīng)的python的語言。于是我就開始了查找“如何定義函數(shù)”(詳見mofan的優(yōu)酷),“循環(huán)體”和“if條件語句”的格式()“數(shù)學(xué)符號”(詳見mofan的優(yōu)酷),以及print的使用

1.def是python中指定義,一般用來定義函數(shù),如果需要深度學(xué)習(xí)搭建網(wǎng)絡(luò)可用來定義網(wǎng)絡(luò)。值得注意的一點(diǎn)是

我不清楚為什么,但是如果沒有加的話,那個函數(shù)公式就是一個花瓶,就像一個結(jié)果輸不出去。

2.最坑的就是邏輯。一開始邏輯沒理清楚,或者說在代碼上有疏漏,導(dǎo)致我將left和right放在了循環(huán)體里,結(jié)果可想而知。不過也是因?yàn)檫@個錯誤,我知道pycharm中的debug怎么用,挺簡單的,百度一下就出來了。

3.不知道什么原因,看的莫煩視頻中的print多個變量一起輸出是沒有辦法在我的pycharm中使用的,出來的結(jié)果很奇怪??赡苁且?yàn)槲沂莣in10不是ios吧。print如果多個變量一起輸出必須是print("名字:%s,名字2:%s"%(a,b))結(jié)果輸出就是名字:a ,名字2:b

關(guān)于python中數(shù)據(jù)變量。第一遍運(yùn)行結(jié)果出現(xiàn)很明顯不對,于是我采用了debug。結(jié)果發(fā)現(xiàn),mid1處一直為1而不是1.5,于是就開始了解數(shù)據(jù)變量。起初我猜測python默認(rèn)所有變量為整型,但是根據(jù)二分法的結(jié)果我意識到此猜測不對,所以要改整個file的變量格式?jīng)]有必要。所以我就在mid1式子前面加了一個float,結(jié)果就顯示為1.5了。但是如果我將整個式子用()括起來,前面加float,結(jié)果還是1。我不太理解為什么。不過我知道了python的數(shù)據(jù)格式是根據(jù)輸入量決定的,也就是說你的輸入量如果是整型,那么與其直接相關(guān)的計算輸出結(jié)果一定是整型,而且還是不采用進(jìn)位的整型。在我沒有采用+float/+.0這兩種方法之前,mid1~3全部是整型。

或者不再mid1前面加float,直接將輸入量后面點(diǎn)個點(diǎn)就行

真的很想吐槽一下print,好麻煩啊啊啊啊每次都得弄個%s,而且有時候還不能放一起!?。。?/p>

不要問我掌握了什么,要問我現(xiàn)在寫完這個代碼后有多么的愛python的精度表示 :-)我決定以后只要再編寫數(shù)學(xué)公式的代碼都將輸入量的小數(shù)學(xué)點(diǎn)后面補(bǔ)很多0

fibonacci函數(shù)定義,每次debug后我的手都是抖的O( _ )O~

不知道自己什么時候有的強(qiáng)迫癥,只要是代碼下面有“~”我就必須要消掉。笑哭。這個很簡單,前四個除了費(fèi)波納茨,都很簡單。

這個公式看起來很麻煩,便寫的時候更要謹(jǐn)慎。我上回把那個2擱在了分號下面,結(jié)果很大,所以還是換算成0.5更好(PS:勿忘那長河般的0)。

雖然代碼很長,但是主要是因?yàn)閜rint太多。本打算在開頭print,最后結(jié)果會漏掉最后一部分。懶得想其他辦法了,直接就這樣吧

一開始while里面寫成了,導(dǎo)致run不出來。繼而,debug也沒法用。在網(wǎng)上一查才知道 “沒聯(lián)網(wǎng)”+“沒選斷點(diǎn)”。最后想嘗試將else里面的內(nèi)容輸出來,結(jié)果發(fā)現(xiàn)run以后被刷屏了。于是改成i7以后還是不行,于是想著加一個break跳出循環(huán),結(jié)果成效了。

然后剛剛由debug了一下,才知道原來是i+1在if里面,因?yàn)闆]有辦法+1,所以i=6一直存在,就不斷循環(huán)。因?yàn)榧觔reak也好,i+1也好,都可以。

這是我第一組自己實(shí)現(xiàn)的python代碼,就是數(shù)學(xué)公式用python語言組裝起來。剛開始的時候知道大概需要在語言中體現(xiàn)什么,但不太清楚。于是我就在網(wǎng)上找了幾個二分法的,他們都各有不同,但框架都差不多,不過如果要用到我們的那個公式里還需要改變很多。然后我就開始分析我們的題,我發(fā)現(xiàn)大體需要兩部分,一部分函數(shù)定義,一部分循環(huán)體。但我不知道如何定義函數(shù),如何寫數(shù)學(xué)公式,如何弄變量,也就是說一些小點(diǎn)不太會,所以我選擇直接百度。因?yàn)槲抑雷约洪喿x的能力不錯,相比于從視頻中提取要素,我更擅長通過閱讀獲得要點(diǎn)。有目的性地找知識點(diǎn),掌握地更牢固。

于是我就開始了第一個——二分法的編寫。我發(fā)現(xiàn),自己出現(xiàn)了很多錯誤而且有很多地方都很基礎(chǔ)。但我依然沒選擇視頻,而是將這些問題直接在百度上找,因?yàn)橐曨l講完或許你也沒找到點(diǎn)。當(dāng)然,這是一步一步走的,不是直接就將程序擺上去,一點(diǎn)一點(diǎn)改。

隨著前兩個的成功,我發(fā)現(xiàn)自己對于這些代碼有了自信,似乎看透了他們的偽裝,抓住了本質(zhì)。除此之外,我還意識到自己自從8月份以后,學(xué)習(xí)能力似乎提高了不少,而且有了更為有效的學(xué)習(xí)方法。各方面都有了一定的覺醒。除了第一個找了幾個牛頭不對馬嘴的代碼,其他都是根據(jù)自己的邏輯寫,邏輯通下來以后,對應(yīng)語言中某一部分不知道如何翻譯就去百度,其實(shí)這幾個套路都一樣或者說數(shù)學(xué)公式轉(zhuǎn)化的套路都一樣。

我還意識到,匯編其實(shí)是最難的語言,目前為止所學(xué)到的,因?yàn)楹芏喽夹枰约喝ザx,去死摳,需要記住大量的指令且不能靈活變通。但是其他的卻只需要將一些對應(yīng)的記下來就好。python真的挺簡單的。而且,我發(fā)現(xiàn)自己今天似乎打開了新世界的大門,我愛上了這種充滿了靈性的東西,充滿了嚴(yán)謹(jǐn)?shù)拿利?,還有那未知的變化,我發(fā)現(xiàn)我似乎愛上了代碼??赡懿粌H僅局限于python,這些語言都充滿了挑戰(zhàn)性。我覺得當(dāng)你疑惑的時候,就需要相信直覺,至少我發(fā)現(xiàn)它很準(zhǔn)

分享名稱:python優(yōu)化函數(shù) python性能優(yōu)化
URL網(wǎng)址:http://vcdvsql.cn/article22/hiocjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、外貿(mào)網(wǎng)站建設(shè)、建站公司企業(yè)網(wǎng)站制作、網(wǎng)站排名、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化