1、使用python的運(yùn)算法。
專(zhuān)注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)陽(yáng)新免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
2、x和1進(jìn)行“按位與運(yùn)算”,因?yàn)?只有最后一位是1,其他位都是0。
3、x1的時(shí)候,只要x的最后一位是1,結(jié)果都會(huì)是1,因?yàn)閤前面的位和0進(jìn)行與運(yùn)算結(jié)果一定是0。
4、然后再把x向右移一位,去掉最后一個(gè)位的數(shù)字,再重復(fù)上述計(jì)算,統(tǒng)計(jì)1的個(gè)數(shù)即可。
最優(yōu)化
為什么要做最優(yōu)化呢?因?yàn)樵谏钪?,人們總是希望幸福值或其它達(dá)到一個(gè)極值,比如做生意時(shí)希望成本最小,收入最大,所以在很多商業(yè)情境中,都會(huì)遇到求極值的情況。
函數(shù)求根
這里「函數(shù)的根」也稱(chēng)「方程的根」,或「函數(shù)的零點(diǎn)」。
先把我們需要的包加載進(jìn)來(lái)。import numpy as npimport scipy as spimport scipy.optimize as optimport matplotlib.pyplot as plt%matplotlib inline
函數(shù)求根和最優(yōu)化的關(guān)系?什么時(shí)候函數(shù)是最小值或最大值?
兩個(gè)問(wèn)題一起回答:最優(yōu)化就是求函數(shù)的最小值或最大值,同時(shí)也是極值,在求一個(gè)函數(shù)最小值或最大值時(shí),它所在的位置肯定是導(dǎo)數(shù)為 0 的位置,所以要求一個(gè)函數(shù)的極值,必然要先求導(dǎo),使其為 0,所以函數(shù)求根就是為了得到最大值最小值。
scipy.optimize 有什么方法可以求根?
可以用 scipy.optimize 中的 bisect 或 brentq 求根。f = lambda x: np.cos(x) - x # 定義一個(gè)匿名函數(shù)x = np.linspace(-5, 5, 1000) # 先生成 1000 個(gè) xy = f(x) # 對(duì)應(yīng)生成 1000 個(gè) f(x)plt.plot(x, y); # 看一下這個(gè)函數(shù)長(zhǎng)什么樣子plt.axhline(0, color='k'); # 畫(huà)一根橫線,位置在 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); # 這里的 [_] 表示上一個(gè) 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ù)求最小化
求最小值就是一個(gè)最優(yōu)化問(wèn)題。求最大值時(shí)只需對(duì)函數(shù)做一個(gè)轉(zhuǎn)換,比如加一個(gè)負(fù)號(hào),或者取倒數(shù),就可轉(zhuǎn)成求最小值問(wèn)題。所以?xún)烧呤峭粏?wèn)題。
初始值對(duì)最優(yōu)化的影響是什么?
舉例來(lái)說(shuō),先定義個(gè)函數(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ù),是個(gè)通用的接口,背后是很多方法在支撐。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)畫(huà)出來(lái),用圓圈表示plt.scatter(xmin, f(xmin), marker='v', s=300); # 最小值點(diǎn)畫(huà)出來(lái),用三角表示plt.xlim(-20, 20);
初始值為 3 時(shí),成功找到最小值。
現(xiàn)在來(lái)看看初始值為 10 時(shí),找到的最小值點(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);
由上圖可見(jiàn),當(dāng)初始值為 10 時(shí),函數(shù)找到的是局部最小值點(diǎn),可見(jiàn) minimize 的默認(rèn)算法對(duì)起始點(diǎn)的依賴(lài)性。
那么怎么才能不管初始值在哪個(gè)位置,都能找到全局最小值點(diǎn)呢?
如何找到全局最優(yōu)點(diǎn)?
可以使用 basinhopping 函數(shù)找到全局最優(yōu)點(diǎn),相關(guān)背后算法,可以看幫助文件,有提供論文的索引和出處。
我們?cè)O(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 求對(duì)應(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)) # 定義畫(huà)布和圖形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)的位置是個(gè)元組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()
畫(huà)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)系?
曲線擬合的問(wèn)題是,給定一組數(shù)據(jù),它可能是沿著一條線散布的,這時(shí)要找到一條最優(yōu)的曲線來(lái)擬合這些數(shù)據(jù),也就是要找到最好的線來(lái)代表這些點(diǎn),這里的最優(yōu)是指這些點(diǎn)和線之間的距離是最小的,這就是為什么要用最優(yōu)化問(wèn)題來(lái)解決曲線擬合問(wèn)題。
舉例說(shuō)明,給一些點(diǎn),找到一條線,來(lái)擬合這些點(diǎn)。
先給定一些點(diǎn):N = 50 # 點(diǎn)的個(gè)數(shù)m_true = 2 # 斜率b_true = -1 # 截距dy = 2.0 # 誤差np.random.seed(0)xdata = 10 * np.random.random(N) # 50 個(gè) 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)一個(gè)線性關(guān)系,要找到一條斜線來(lái)代表這些點(diǎn),這就是經(jīng)典的一元線性回歸。目標(biāo)就是找到最好的線,使點(diǎn)和線的距離最短。要優(yōu)化的函數(shù)是點(diǎn)和線之間的距離,使其最小。點(diǎn)是確定的,而線是可變的,線是由參數(shù)值,斜率和截距決定的,這里就是要通過(guò)優(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ù)測(cè)的線之間距離太遠(yuǎn),說(shuō)明擬合得不好,最好的線,應(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]
上面兩個(gè)輸出即是預(yù)測(cè)的直線斜率和截距,我們是根據(jù)點(diǎn)來(lái)反推直線的斜率和截距,那么真實(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 方法,這個(gè)問(wèn)題的目標(biāo)函數(shù)是誤差平方和,這就又有一個(gè)特定的解法,即最小二乘。
最小二乘的思想就是要使得觀測(cè)點(diǎn)和估計(jì)點(diǎn)的距離的平方和達(dá)到最小,這里的“二乘”指的是用平方來(lái)度量觀測(cè)點(diǎn)與估計(jì)點(diǎn)的遠(yuǎn)近(在古漢語(yǔ)中“平方”稱(chēng)為“二乘”),“最小”指的是參數(shù)的估計(jì)值要保證各個(gè)觀測(cè)點(diǎn)與估計(jì)點(diǎn)的距離的平方和達(dá)到最小。
關(guān)于最小二乘估計(jì)的計(jì)算,涉及更多的數(shù)學(xué)知識(shí),這里不想詳述,其一般的過(guò)程是用目標(biāo)函數(shù)對(duì)各參數(shù)求偏導(dǎo)數(shù),并令其等于 0,得到一個(gè)線性方程組。具體推導(dǎo)過(guò)程可參考斯坦福機(jī)器學(xué)習(xí)講義 第 7 頁(yè)。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 的第一個(gè)參數(shù)不再是誤差平方和 chi2,而是誤差本身 deviations,即沒(méi)有平方,也沒(méi)有和。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): # 首先定義一個(gè)非線性函數(shù),有 3 個(gè)參數(shù) return beta0 + beta1 * np.exp(-beta2 * x**2)beta = (0.25, 0.75, 0.5) # 先猜 3 個(gè) 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ù)測(cè)值的差,求最優(yōu)曲線時(shí)要用到beta_start = (1, 1, 1)beta_opt, beta_cov = opt.leastsq(g, beta_start)print beta_opt # 求到的 3 個(gè)最優(yōu)的 beta 值[ 0.25525709 0.74270226 0.54966466]
拿估計(jì)的 beta_opt 值跟真實(shí)的 beta = (0.25, 0.75, 0.5) 值比較,差不多。fig, ax = plt.subplots()ax.scatter(xdata, ydata) # 畫(huà)點(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ù)最小化之外,還要滿(mǎn)足約束條件,舉例說(shuō)明。
邊界約束def f(X): x, y = X return (x-1)**2 + (y-1)**2 # 這是一個(gè)碗狀的函數(shù)x_opt = opt.minimize(f, (0, 0), method='BFGS').x # 無(wú)約束最優(yōu)化
假設(shè)有約束條件,x 和 y 要在一定的范圍內(nèi),如 x 在 2 到 3 之間,y 在 0 和 2 之間。bnd_x1, bnd_x2 = (2, 3), (0, 2) # 對(duì)自變量的約束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) # 沒(méi)有約束下的最小值,藍(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)理論,先來(lái)看下存在等式約束的極值問(wèn)題求法,比如下面的優(yōu)化問(wèn)題。
目標(biāo)函數(shù)是 f(w),下面是等式約束,通常解法是引入拉格朗日算子,這里使用 ββ 來(lái)表示算子,得到拉格朗日公式為
l 是等式約束的個(gè)數(shù)。
然后分別對(duì) w 和ββ 求偏導(dǎo),使得偏導(dǎo)數(shù)等于 0,然后解出 w 和βiβi,至于為什么引入拉格朗日算子可以求出極值,原因是 f(w) 的 dw 變化方向受其他不等式的約束,dw的變化方向與f(w)的梯度垂直時(shí)才能獲得極值,而且在極值處,f(w) 的梯度與其他等式梯度的線性組合平行,因此他們之間存在線性關(guān)系。(參考《最優(yōu)化與KKT條件》)
對(duì)于不等式約束的極值問(wèn)題
常常利用拉格朗日對(duì)偶性將原始問(wèn)題轉(zhuǎn)換為對(duì)偶問(wèn)題,通過(guò)解對(duì)偶問(wèn)題而得到原始問(wèn)題的解。該方法應(yīng)用在許多統(tǒng)計(jì)學(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)色星星,沒(méi)有約束下的最小值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ì)參考官方文檔。
1、python中使用pow函數(shù)求n的n方根。首先打開(kāi)python的編輯器,新建一個(gè)python 3的文件:
2、pow函數(shù)的用法很簡(jiǎn)單,只要傳入待開(kāi)方的數(shù),以及要開(kāi)幾次方就可以了。比如演示里是3開(kāi)3次方:
3、然后需要編譯運(yùn)行,點(diǎn)擊菜單欄上run下面的run命令,執(zhí)行編譯運(yùn)行:
4、在下方的結(jié)果中即可看到運(yùn)算的結(jié)果尾27,說(shuō)明是是正確的。以上就是python中開(kāi)N次方的操作方法:
Sympy是python中非常強(qiáng)大的符號(hào)運(yùn)算庫(kù),可以以書(shū)寫(xiě)習(xí)慣表示數(shù)學(xué)表達(dá)式。下面介紹用Sympy求方程數(shù)值解的方法。
下面代碼全部在
from sympy import *
init_printing(use_unicode=True) # 按書(shū)寫(xiě)習(xí)慣輸出
下運(yùn)行。
數(shù)學(xué)表達(dá)式的輸入
首先聲明符號(hào):
x = symbols('x')
即計(jì)算機(jī)中的變量x代表數(shù)學(xué)表達(dá)式中的x。在后文輸出中所有的x會(huì)顯示為x。如果x=symbols('x0'),則輸入的方程中所有x將在輸出中以x0表示。
如果需要希臘字母
l, r = symbol('lambda rho')
l, r將分別以λ,ρ表示??梢栽谝粋€(gè)表達(dá)式中同時(shí)聲明多個(gè)符號(hào)。
或者使用var()聲明:
var('x')
與上面等效。
聲明表達(dá)式:
f = (5/x)*(exp(x)-1)-exp(x)
此時(shí)若輸出f可以看到書(shū)寫(xiě)習(xí)慣的表達(dá)式。由于表達(dá)式在markdown下顯示不正常,在此不放置示例。注意f的類(lèi)型是class 'sympy.core.add.Add'
求f(x)=0數(shù)值解
因?yàn)橛械暮瘮?shù)零點(diǎn)不止一個(gè),因此在Sympy中解的輸出為一個(gè)list。使用solve(表達(dá)式,自變量符號(hào))可以解析地解方程:
s, = solve(f, x)
這里根據(jù)上面f的賦值,得到s為
LambertW(-5e**-5)+5
其中用了特殊函數(shù)表達(dá)。
我們需要求這個(gè)結(jié)果的數(shù)值近似,則輸出
s.evalf()
得到輸出
4.96511423174428
就是方程f(x)=0的數(shù)值解。
求給定自變量x值時(shí)函數(shù)f(x)的值 | 將表達(dá)式轉(zhuǎn)化為函數(shù)
f.evalf(subs = {x:4.96})
得到f(4.96)的數(shù)值
0.141885450782171
如果需要以計(jì)算機(jī)函數(shù)的形式定義函數(shù)f(x),則可以使用lambdify()進(jìn)行轉(zhuǎn)化:
f_func = lambdify(x, f)
之后可以調(diào)用
f_func(4.96)
輸出
0.141885450782
利用這個(gè)方法可以測(cè)試方程的數(shù)值算法,如使用sympy接口寫(xiě)牛頓法等。
寫(xiě)個(gè)例子吧,需要安裝numpy數(shù)學(xué)庫(kù)
#!/usr/bin/python
import
numpy
as
np
#求解方程x^2+2x+1=0的根
#方程參數(shù)列表抽象成一下形式:
arg=[1,
2,
1]
#求解
np.roots(args)
運(yùn)行即可求解了,如果沒(méi)有實(shí)根會(huì)給虛根的結(jié)果
1、首先打開(kāi)python的編輯器軟件,編輯器的選擇可以根據(jù)自己的喜好,之后準(zhǔn)備好一個(gè)空白的python文件:
2、接著在空白的python文件上編寫(xiě)python程序,這里假設(shè)當(dāng)x>1的時(shí)候,方程為根號(hào)下x加4,當(dāng)x-1時(shí),方程為5乘以x的平方加3。所以在程序的開(kāi)始需要引入math庫(kù),方便計(jì)算平方和開(kāi)方,之后在函數(shù)體重寫(xiě)好表達(dá)式就可以了,最后調(diào)用一下函數(shù),將結(jié)果打印出來(lái):
3、最后點(diǎn)擊軟件內(nèi)的綠色箭頭,運(yùn)行程序,在下方可以看到最終計(jì)算的結(jié)果,以上就是python求分段函數(shù)的過(guò)程:
網(wǎng)頁(yè)名稱(chēng):用python求函數(shù)零點(diǎn) 函數(shù)零點(diǎn)怎么求
本文URL:http://jinyejixie.com/article28/hpcgjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、品牌網(wǎng)站建設(shè)、云服務(wù)器、品牌網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)
猜你還喜歡下面的內(nèi)容