-
111查看全部
-
#?常用圖標:散點圖?scatter fig?=?plt.figure() ax?=?fig.add_subplot(3,?3,?1)?#?3行3列第1個子圖,創建一個子圖 n?=?128 X?=?np.random.normal(0,?1,?n) Y?=?np.random.normal(0,?1,?n) T?=?np.arctan2(Y,?X)?#?用來上色,arctan的平方(Y/X) #?plt.axes([0.05,?0.05,?0.9,?0.9])?#?指定顯示范圍 ax.scatter(X,?Y,?s=25,?c=T,?alpha=.5)?#?s:size plt.xlim(-1.5*1.1,?1.5*1.1),?plt.xticks()?#?xlim設置橫軸的上下限,?xticks設置橫軸記號 plt.ylim(-1.5*1.1,?1.5*1.1),?plt.yticks() plt.axis() plt.title("scatter") plt.xlabel("x") plt.ylabel("y") #?bar ax?=?fig.add_subplot(332)?#?3行3列第2個 n?=?5 X?=?np.arange(n) Y1?=?(1?-?X?/?float(n))?*?np.random.uniform(0.5,?1.0,?n) Y2?=?(1?-?X?/?float(n))?*?np.random.uniform(0.5,?1.0,?n) ax.bar(X,?+Y1,?facecolor='#9999ff',?edgecolor='purple') ax.bar(X,?-Y2,?facecolor='#ff9999',?edgecolor='green') for?x,?y?in?zip(X,?Y1): ????plt.text(x?+?0.4,?y?+?0.05,?'%.2f'?%?y,?ha='center',?va='bottom') for?x,?y?in?zip(X,?Y2): ????plt.text(x?+?0.4,?-y?-?0.05,?'%.2f'?%?y,?ha='center',?va='top') #?Pie fig.add_subplot(333) n?=?20 Z?=?np.ones(n) Z[-1]?*=?2?#?最后一個設為2 #?explode?每個扇形離中心的距離,labels?將顏色值顯示出來 plt.pie(Z,?explode=Z?*?.05,?colors=['%f'?%?(i?/?float(n))?for?i?in?range(n)], ????????labels=['%.2f'?%?(i?/?float(n))?for?i?in?range(n)]) #?plt.gca().set_aspect('equal')?#?正圓 plt.xticks([]),?plt.yticks([]) #?極坐標圖?polar fig.add_subplot(334,?polar=True)?#?polar!=?True為折線圖 n?=?20 theta?=?np.arange(0.0,?2?*?np.pi,?2?*?np.pi?/?n) radii?=?10?*?np.random.rand(n) plt.polar(theta,?radii)?#?兩種方法都可以 #?plt.plot(theta,?radii) #?heatmap?熱圖 fig.add_subplot(335) from?matplotlib?import?cm data?=?np.random.rand(3,?3) cmap?=?cm.Blues?#?藍色系 #?interpolation?插值:用離它最近的值做插值,coloarmap,?aspect?縮放,vmin?白色,vmax?這里為藍色 map?=?plt.imshow(data,?interpolation='nearest',?cmap=cmap,?aspect='auto',?vmin=0,?vmax=1) #?3D from?mpl_toolkits.mplot3d?import?Axes3D ax?=?fig.add_subplot(336,?projection="3d") ax.scatter(1,?1,?3,?s=100) #?hot?map?熱力圖 fig.add_subplot(313) def?f(x,?y): ????return?(1?-?x?/?2?+?x?**5?+?y?**?3)?*?np.exp(-x?**?2?-?y?**2) n?=?256 x?=?np.linspace(-3,?3,?n) y?=?np.linspace(-3,?3,?n) X,?Y?=?np.meshgrid(x,?y) plt.contourf(X,?Y,?f(X,?Y),?8,?alpha=.75,?cmap=plt.cm.hot)?#?cmap?指定熱力圖顏色 plt.savefig("./data/fig.png",?dpi=72)?#?以分辨率?72?來保存圖片 plt.show()
查看全部 -
#encoding=utf-8 import?numpy?as?np def?main(): ????#?line ????import?matplotlib.pyplot?as?plt ????x?=?np.linspace(-np.pi,?np.pi,?256,?endpoint=True)?#?-pi和pi之間取256個點,并包含最后一個點 ????c,?s?=?np.cos(x),?np.sin(x) ????plt.figure(1)?#?繪制第一個圖 ????plt.plot(x,?c,?color="blue",?linewidth=1.0,?linestyle='-',?label="COS",?alpha=0.5) ????plt.plot(x,?s,?"r*",?label="SIN")?#?r:red,?*:?線型 ????plt.title("Cos?&?Sin") ????#?現在顯示四周都有邊框,如何只顯示兩條坐標軸呢,需要除去兩邊邊框 ????ax?=?plt.gca()?#?軸的編輯器?#spines表示四周的線 ????ax.spines["right"].set_color("none")?#?去掉右外框 ????ax.spines["top"].set_color("none")??#?去掉上外框 ????ax.spines["left"].set_position(("data",?0))?#?設置左邊線位置 ????ax.spines["bottom"].set_position(("data",?0)) ????ax.xaxis.set_ticks_position("bottom")?#?編輯軸上數字,坐標軸的數字顯示在橫軸下面和縱軸左面 ????ax.yaxis.set_ticks_position("left")?#?編輯軸上數字 ????#?設置橫軸,兩個數組,第一個指定橫軸標識的位置,第二個為內容 ????plt.xticks([-np.pi,?-np.pi?/?2.0,?np.pi?/?2.0,?np.pi], ???????????????[r'$-\pi$',?r'$-\pi/2$',?r'$+\pi/2$',?r'$+\pi$']) ????plt.yticks(np.linspace(-1,?1,?5,?endpoint=True))?#?直接給y軸標數字即可 ????for?label?in?ax.get_xticklabels()?+?ax.get_yticklabels():?#?設置坐標軸數字顯示大小和顏色 ????????label.set_fontsize(16) ????????#?設置label的小方塊及其背景?face:?背景色,edge:?邊緣,alpha:透明度 ????????label.set_bbox(dict(facecolor="purple",?edgecolor="None",?alpha=0.2)) ????plt.legend(loc="upper?left")?#?圖例說明,loc指定位置 ????plt.grid()?#?網格線 ????#?plt.axis([-1,?1,?-0.5,?1])?#?[-1,?1]?橫軸顯示范圍,[-0.5,1]?縱軸顯示范圍 ????plt.fill_between(x,?np.abs(x)<0.5,?c,?c>0.5,?color="green",?alpha=0.25)?#?填充兩條線間的顏色 ????t?=?1 ????plt.plot([t,?t],?[0,?np.cos(t)],?'y',?linewidth=3,?linestyle='--')?#?加注釋 ????plt.annotate("cos(1)",?xy=(t,?np.cos(1)),?xycoords="data",?xytext=(+10,?+30), ????????textcoords="offset?points", ????????arrowprops=dict(arrow,?connection)) ????#?xy為加的點的位置,?xytext加偏移量,textcoords指定是一個相對位置,connectionstyle指定弧度為0.2 ????plt.show() ''' plt.fill_between(x,?y1,?y2=0,?where=None, ????interpolate=False,?step=None,?hold=None,?data=None,?**kwargs) x?-?array(?length?N)?定義曲線的?x?坐標 y1?-?array(?length?N?)?or?scalar?定義第一條曲線的?y?坐標 y2?-?array(?length?N?)??or?scalar?定義第二條曲線的?y?坐標 where?-?array?of?bool?(length?N),?optional,?default:?None? ?????????????排除一些(垂直)區域被填充。 ?????????????注:我理解的垂直區域,但幫助文檔上寫的是?horizontal?regions ''' #?我的理解:從y1到y2的水平區域 if?__name__?==?"__main__": ????main()
查看全部 -
#?4.?liner from?numpy.linalg?import?* print?np.eye(3)?#?單位矩陣 lst?=?np.array([[1,?2], ????????????????[3,?4]]) print?"Inv:" print?inv(lst)?#?矩陣的逆 print?"T" print?lst.transpose()?#?轉置矩陣 print?"Det:" print?det(lst)?#?行列式 print?eig(lst)?#?特征值和特征向量,一個元組,兩個array y?=?np.array([[5],?[7]]) print?"Solve" print?solve(lst,?y)?#?解方程組?x+2y=5;?3x+4y=7
查看全部 -
#?encoding=utf-8 import?numpy?as?np def?main(): ????lst?=?[[1,?3,?5],?[2,?4,?6]] ????print(type(lst)) ????#?1.?ndArray ????np_lst?=?np.array(lst) ????print(type(np_lst)) ????np_lst=np.array(lst,?dtype=np.float) ????#bool,int,int8,int16,int32,?int64,?int128,?uint8/16/32/64/128,?float,?float16/32/64,?complex64/128 ???? ????print(np_lst.shape)?#?2行,3列 ????print(np_lst.ndim)?#?兩行,維度 ????print(np_lst.dtype)?#?float64,數據類型 ????print(np_lst.itemsize)?#?8,每個元素的大小,數據類型是64,64位占8個字節,itemsize就是8 ????print(np_lst.size)?#?6,6個元素,這個nparray占6*8=48個字節
查看全部 -
#?2.?Some?常用?Arrays print?np.zeros([2,?4]) print?np.ones([3,?5]) print?"Rand:" print?np.random.rand(2,?4)?#?2行4列隨機數數組 print?np.random.rand()?#?產生一個隨機數 print?"RandInt:" print?np.random.randint(1,?10,?3)?#?參數為隨機整數的范圍[1,10],?3個 print?"Randn:"?#?標準動態分布的隨機數 print?np.random.randn(2,?4)?#?2行4列 print?np.random.choice([10,?20,?30])?#?列表中隨機一個產生 print?"Distribute:"?#?分布 print?np.random.beta(1,?10,?100)?#?beta分布,還可二項分布等
查看全部 -
#?3.?Some?Array?Opers lst?=?np.arange(1,?11).reshape([2,?5])?#?5可以缺省為-1,?產生一個1-11(不含11)的等差數列 print?lst print?"Exp" print?np.exp(lst) print?"Exp2" print?np.exp2(lst) print?"Sqrt" print?np.sqrt(lst) print?"sin" print?np.sin(lst) print?"log" print?np.log(lst) lst?=?np.arange(1,25).reshape([3,?2,?4])?#?等差數列 #?即如下數組 lst?=?np.array([[[1,?2,?3,?4], ?????????????????[5,?6,?7,?8]], ????????????????[[9,?10,?11,?12], ?????????????????[13,?14,?15,?16]], ????????????????[[17,?18,?19,?20], ?????????????????[21,?22,?23,?24]]]) print?lst print?lst.sum() #?x為維度,x越大,深入程度越大。0:最外層,1:再往里深入一層,對各個元素操作 print?lst.sum(axis=0)?#?最外層共3個元素,第一個元素:[[1,?2,?3,?4],?[5,?6,?7,?8]] print?lst.sum(axis=1)?#?再深入一層,第一個元素:[1,?2,?3,?4],第二個:[5,?6,?7,?8] print?lst.sum(axis=2)?#?再深入一層,遍歷[1,?2,?3,?4]求和得第一個元素。 print?lst.max(),?lst.min() print?lst.max(axis=2) print?lst.max(axis=1) print?lst.max(axis=0) #?對兩個數組操作 lst1?=?np.array([10,?20,?30,?40]) lst2?=?np.array([4,?3,?2,?1]) print?"Add" print?lst1+lst2 print?"Sub" print?lst1-lst2 print?"Mul" print?lst1*lst2 print?"Div" print?lst1/lst2 print?"Square" print?lst1**2 print?"Dot"?#?點乘 print?np.dot(lst1.reshape([2,?2]),?lst2.reshape([2,?2])) #?numpy?中?array?追加?Concatenate print?"Concatenate" print?np.concatenate((lst1,?lst2),?axis=0)?#?追加,更簡單的追加如下 print?np.vstack((lst1,?lst2))?#?上下接起來,2行,垂直接起來 print?np.hstack((lst1,?lst2))?#?水平接起來 print?np.split(lst1,?2)?#?分割為兩個數組 print?np.copy(lst1)?#?拷貝
查看全部 -
問:代碼沒有問題,無法得到運行結果,怎么辦?
答:只定義了函數,但沒有執行的語句,加上 if?__name__?==?'__main__':? ????main()
查看全部 -
python數據分析包
python數據分析重要的幾個庫:numpy、scipy、matplotlib、pandas、-scikit-learn、Keras。
開發工具:Anaconda
查看全部 -
from scipy.interpolate import interpld
x=np.linspace(0,1,10)
y=np.sin(2*np.pi*x)
li=interpld(x,y,kind="cubic")
x_new=np.linspace(0,1,50)
li_res=li(x_new)
figure()
plot(x,y,"r")
plot(x_new,y_new,"k")
show()
print(y_new)
查看全部 -
1.Numpy?數據結構基礎 2.scipy?強大的科學計算方法 3.matplotlib?豐富的可視化套件 4.pandas?基礎數據分析套件 5.scilit-learn?數據分析建模庫 6.keras?人工神經網絡
查看全部 -
**2. 優化(scipy.optimize)**
scipy.optimize模塊提供了函數最值、曲線擬合和求根的算法。
該模塊包括:
——多元標量函數的無約束和約束極小化(minimize)。使用多種算法(例如BFGS、Nder-Mead單純形、Newton共軛梯度、COBYLA或SLSQP)
——全局(蠻力)優化例程。basinhopping, differential_evolution)
——最小二乘極小化(least_squares)和曲線擬合(curve_fit)算法
——標量單變量函數極小化(minimize_scalar)和根查找器(root_scalar)
——多元方程組求解器(root)使用多種算法(例如,混合鮑威爾、Levenberg-MarQuardt或大規模方法,如Newton-Krylov)
**無約束函數最值(以最小值為例):**
導入模塊:
```
from scipy.optimize import minimize
import numpy as np
```
在數學最優化中,Rosenbrock函數是一個用來測試最優化算法性能的非凸函數,由Howard Harry Rosenbrock在1960年提出。也稱為Rosenbrock山谷或Rosenbrock香蕉函數,也簡稱為香蕉函數。
函數表達式(N是x的維數):

定義一個目標函數(Rosenbrock函數——香蕉函數):
```
def rosen(x):
? ? """The Rosenbrock function"""
? ? return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0+(1-x[:-1])**2.0)
x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
```
求解:
```
res = minimize(rosen, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True})
?print(res.x)? ? ?#res.x是優化結果,返回一個ndarry
```
minimize(fun, x0[, args, method, jac, hess, …])? ?
fun——一個或多個變量的標量函數的最小化
x0——初始猜測值,相當于指定了N
method就是優化算法
Xtol是精度
disp指是否顯示過程(True則顯示)
過程與結果:
```
Optimization terminated successfully.
? ? ? ? ?Current function value: 0.000000
? ? ? ? ?Iterations: 339
? ? ? ? ?Function evaluations: 571
[1. 1. 1. 1. 1.]
```
**有約束函數最值(最小值為例):**
導入模塊:
```
from scipy.optimize import minimize
import numpy as np
```
定義函數:
f(x) = 2xy+2x-x^2^-2y^2^?
偏導數:
2y+2-2x
2x-4y
```
def fun(x):
? ? return (2*x[0]*x[1]+2*x[0]-x[0]**2-2*x[1]**2)
def func_deriv(x):
? ? dfdx0 = (-2*x[0]+2*x[1]+2)
? ? dfdx1 = (2*x[0]-4*x[1])
? ? return np.ndarry([dfdx0,dfdx1])
```
約束條件(等于轉化為=0和不等于轉化為>=0):
3x^2^-y = 0
y-1>=0
```
cons = ({"type":"eq","fun":lambda x;np.ndarray([x[0]**3-x[1]]),"jac":lamda x;np.ndarray([3*(x[0]**2),-1])}
? ? ? ? ?,{"type":"ineq","fun":lambda x;np.ndarray([x[1]-1]),"jac":lamda x;np.ndarray(0,1])})? ? ? ? ?
```
雅可比矩陣是函數的一階偏導數以一定方式排列成的矩陣,其行列式稱為雅可比行列式。
求解:
```
x0 = np.array([-1.0, 1.0])
>>> res = minimize(func, x0, method='SLSQP', jac=func_deriv,constraints=cons, options={'disp': True})? ? ? ?#順序最小二乘規劃(SLSQP)算法(method='SLSQP')
print(res.x)
```
結果:
```
x:array([1.0000009,1])
```
**優化器求根:**
導入模塊:
```
from scipy.optimize import root
import numpy as np
```
定義函數:
x+2cos(x) = 0
```
def func(x):
? ? return x + 2 * np.cos(x)
```
求解和結果:
```
sol = root(func, 0.1)? ?#root(fun,x0),fun為函數,x0是Initial guess.(初始猜測值)
print(sol.x) #優化(根)結果
>>array([-1.02986653])
print(sol.fun)? ? ?#目標函數的值
>>array([ -6.66133815e-16])
```
查看全部 -
import?numpy?as?np from?scipy.integrate?import?quad,dblquad,nquad def?main(): ???print(quad(lambda?x:?np.exp(-x),?0,?np.inf)) ???print(dblquad(lambda?t,?x:?np.exp(-x?*?t)?/?t?**?3,?0,?np.inf,?lambda?x:?1,?lambda?x:?np.inf)) ???def?f(x,y): ???????return?x*y ???def?bound_y(): ???????return?[0,0.5] ???def?bound_x(y): ???????return?[0,1-2*y] ???print(nquad(f,[bound_x,bound_y])) if?__name__?==?"__main__": ????main()
查看全部 -
import?numpy?as?np import?matplotlib.pyplot?as?plt def?main(): ????x?=?np.linspace(-np.pi,?np.pi,?256,?endpoint=True) ????print(x) ????c,?s?=?np.cos(x),?np.sin(x) ????plt.figure(1) ????plt.plot(x,?c,?color="blue",?linewidth=1.0,?line,?label="COS",?alpha=0.5) ????plt.plot(x,?s,?"r*",?label="SIN")??#?紅色* ????plt.title("COS?$?SIN") ????ax?=?plt.gca()??#?軸的編輯器 ????ax.spines["right"].set_color("none")??#?隱藏上、右兩個外框 ????ax.spines["top"].set_color("none") ????ax.spines["left"].set_position(("data",?0))??#?將下、左兩個外框設置到數據域的0位置 ????ax.spines["bottom"].set_position(("data",?0)) ????ax.xaxis.set_ticks_position("bottom")??#?坐標軸的數字顯示在橫軸下面和縱軸左面 ????ax.yaxis.set_ticks_position("left") ????#設置坐標軸[標識的位置],?[標識的內容] ????plt.xticks([-np.pi,?-np.pi?/?2,?0,?np.pi?/?2,?np.pi],?[r'$-\pi$',?r'-\pi/2$',?r'$0$',?r'$+\pi/2$',?r'$+\pi$']) ????plt.yticks(np.linspace(-1,?1,?5,?endpoint=True)) ????for?label?in?ax.get_xticklabels()?+?ax.get_yticklabels(): ????????label.set_fontsize(16) ????label.set_bbox(dict(facecolor="white",?edgecolor="None",?alpha=0.2))?#?facecolor背景顏色,edgecolor邊緣顏色,alpha透明度 ????plt.legend(loc="upper?left") ????plt.grid() ????plt.axis([-1,?1,?-0.5,?1])??#?設置顯示范圍 ????plt.fill_between(x,?np.abs(x)?<?0.5,?c,?c?>?0.5,?color="green",?alpha=0.25)??#?填充功能 ????#?c>0.5時才填充,且填充的范圍是|x|<0.5與c之間。|x|<0.5時-->1,填充c到1之間;|x|>=0.5時-->0,填充0到c之間 ????t?=?1 ????plt.plot([t,?t],?[0,?np.cos(t)],?"y",?linewidth=3,?line)??#?添加注釋(y代表黃色) ????plt.annotate("cos(1)",?xy=(t,?np.cos(1)),?xycoords="data",?xytxt=(+10,?+30),?textcoords="offset?points", ????????????????arrowprops=dict(arrow,?connection))??# ????#plt.show() ????#?matplotlib繪制散點圖 ????fig?=?plt.figure() ????ax?=?fig.add_subplot(3,?3,?1) ????n?=?128 ????X?=?np.random.normal(0,?1,?n) ????Y?=?np.random.normal(0,?1,?n) ????T?=?np.arctan2(Y,?X) ????#?plt.axes([0.025,?0.025,?0.95,?0.95]) ????ax.scatter(X,?Y,?s=75,?c=T,?alpha=0.5)?#?s:size,c:color ????plt.xlim(-1.5,?1.5),?plt.xticks([]) ????plt.ylim(-1.5,?1.5),?plt.yticks([]) ????plt.axis() ????plt.title("scatter") ????plt.xlabel("x") ????plt.ylabel("y") ????plt.show() if?__name__?==?"__main__": ????main()
查看全部 -
matploatibl這幾節聽的我一腳懵逼啊,建議關于這個的幾節跳過自己差文檔學習吧查看全部
舉報