自己网站上做淘宝搜索,德阳网站设计,如何注册公司名字,耐克电子商务网站建设Python基础与科学计算常用方法本文使用的是Jupyter Notebook#xff0c;Python3。你可以将代码直接复制到Jupyter Notebook中运行#xff0c;以便更好的学习。导入所需要的头文件import numpy as npimport numpy as npimport matplotlib as mplfrom mpl_toolkits.mplot3d imp…Python基础与科学计算常用方法本文使用的是Jupyter NotebookPython3。你可以将代码直接复制到Jupyter Notebook中运行以便更好的学习。导入所需要的头文件import numpy as npimport numpy as npimport matplotlib as mplfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmimport timefrom scipy.optimize import leastsqfrom scipy import statsimport scipy.optimize as optimport matplotlib.pyplot as pltfrom scipy.stats import norm, poissonimport mathimport scipyfrom scipy.interpolate import BarycentricInterpolatorfrom scipy.interpolate import CubicSplinea np.arange(0, 60, 10).reshape((-1, 1)) np.arange(6)print (a)1.使用array创建标准Python的列表(list)中元素本质是对象。如L [1, 2, 3]需要3个指针和三个整数对象对于数值运算比较浪费内存和CPU。因此Numpy提供了ndarray(N-dimensional array object)对象存储单一数据类型的多维数组。# 通过array函数传递list对象L [1, 2, 3, 4, 5, 6]print (L , L)a np.array(L) # 数组没有逗号print (a , a)print (type(a), type(L))# 若传递的是多层嵌套的list将创建多维数组b np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])print (b)# 数组大小可以通过其shape属性获得print (a.shape)print (b.shape)# # 也可以强制修改shapeb.shape 4, 3print (b)# 注从(3,4)改为(4,3)并不是对数组进行转置而只是改变每个轴的大小数组元素在内存中的位置并没有改变# 当某个轴为-1时将根据数组元素的个数自动计算此轴的长度b.shape 2, -1print (b)print (b.shape)b.shape 3, 4print (b)# 使用reshape方法可以创建改变了尺寸的新数组原数组的shape保持不变c b.reshape((4, -1))print (b \n, b)print (c \n, c)# 数组b和c共享内存修改任意一个将影响另外一个b[0][1] 20print (b \n, b)print (c \n, c)# 数组的元素类型可以通过dtype属性获得print (a.dtype)print (b.dtype)# 可以通过dtype参数在创建时指定元素类型d np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], dtypenp.float)f np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], dtypenp.complex)print (d)print (f)# 如果更改元素类型可以使用astype安全的转换f d.astype(np.int)print (f)# 但不要强制仅修改元素类型如下面这句将会以int来解释单精度float类型d.dtype np.intprint (d)2.使用函数创建如果生成一定规则的数据可以使用NumPy提供的专门函数arange函数类似于python的range函数指定起始值、终止值和步长来创建数组和Python的range类似arange同样不包括终值但arange可以生成浮点类型而range只能是整数类型a np.arange(1, 10, 0.5)print (a)# linspace函数通过指定起始值、终止值和元素个数来创建数组缺省包括终止值b np.linspace(1, 10, 10)print (b , b)# 可以通过endpoint关键字指定是否包括终值c np.linspace(1, 10, 10, endpointFalse)print (c , c)# 和linspace类似logspace可以创建等比数列# 下面函数创建起始值为10^1终止值为10^2有10个数的等比数列d np.logspace(1, 2, 9, endpointTrue)print (d)# 下面创建起始值为2^0终止值为2^10(包括)有10个数的等比数列f np.logspace(0, 10, 10, endpointTrue, base2)print (f)# 使用 frombuffer, fromstring, fromfile等函数可以从字节序列创建数组s abcdzg np.fromstring(s, dtypenp.int8) # 复制对应的ASII码print (g)3.存取3.1常规方法# 数组元素的存取方法和Python的标准方法相同a np.arange(10)print (a)# 获取某个元素print (a[3])# 切片[3,6)左闭右开print (a[3:6])# 省略开始下标表示从0开始print (a[:5])# 下标为负表示从后向前数print (a[3:])# 步长为2print (a[1:9:2])# 步长为-1即翻转print (a[::-1])# 切片数据是原数组的一个视图与原数组共享内容空间可以直接修改元素值a[1:4] 10, 20, 30print (a)# 因此在实践中切实注意原始数据是否被破坏如b a[2:5]b[0] 200print (a)3.2 整数/布尔数组存取3.2.1# 根据整数数组存取当使用整数序列对数组元素进行存取时# 将使用整数序列中的每个元素作为下标整数序列可以是列表(list)或者数组(ndarray)。# 使用整数序列作为下标获得的数组不和原始数组共享数据空间。a np.logspace(0, 9, 10, base2)print (a)i np.arange(0, 10, 2)print (i)# 利用i取a中的元素b a[i]print (b)# b的元素更改a中元素不受影响b[2] 1.6print (b)print (a)3.2.2# 使用布尔数组i作为下标存取数组a中的元素返回数组a中所有在数组b中对应下标为True的元素# 生成10个满足[0,1)中均匀分布的随机数a np.random.rand(10)print (a)# 大于0.5的元素索引print (a 0.5)# 大于0.5的元素b a[a 0.5]print (b)# 将原数组中大于0.5的元素截取成0.5a[a 0.5] 0.5print (a)# # # b不受影响print (b)3.3 二维数组的切片a np.arange(0, 60, 10) # 行向量print (a , a)b a.reshape((-1, 1)) # 转换成列向量print (b)c np.arange(6)print (c)f b c # 行 列print (f)# 合并上述代码a np.arange(0, 60, 10).reshape((-1, 1)) np.arange(6)print (a)# 二维数组的切片print (a[[0, 1, 2], [2, 3, 4]])print (a[4, [2, 3, 4]])print (a[4:, [2, 3, 4]])i np.array([True, False, True, False, False, True])print (a[i])print (a[i, 3])4.1 numpy与Python数学库的时间比较for j in np.logspace(0, 7, 10):j int(j)x np.linspace(0, 10, j)start time.clock()y np.sin(x)t1 time.clock() - startx x.tolist()start time.clock()for i, t in enumerate(x):x[i] math.sin(t)t2 time.clock() - startprint (j, : , t1, t2, t2/t1)# 4.2 元素去重4.2.1直接使用库函数a np.array((1, 2, 3, 4, 5, 5, 7, 3, 2, 2, 8, 8))print (原始数组, a)# 使用库函数uniqueb np.unique(a)print (去重后, b)4.2.2 二维数组的去重结果会是预期的么c np.array(((1, 2), (3, 4), (5, 6), (1, 3), (3, 4), (7, 6)))print (u二维数组\n, c)print (去重后, np.unique(c))4.2.3 方案1转换为虚数# r, i np.split(c, (1, ), axis1)# x r i * 1jx c[:, 0] c[:, 1] * 1jprint (转换成虚数, x)print (虚数去重后, np.unique(x))print (np.unique(x, return_indexTrue)) # 思考return_index的意义idx np.unique(x, return_indexTrue)[1]print (二维数组去重\n, c[idx])4.2.3 方案2利用setprint (去重方案2\n, np.array(list(set([tuple(t) for t in c]))))4.3 stack and axisa np.arange(1, 10).reshape((3, 3))b np.arange(11, 20).reshape((3, 3))c np.arange(101, 110).reshape((3, 3))print (a \n, a)print (b \n, b)print (c \n, c)print (axis 0 \n, np.stack((a, b, c), axis0))print (axis 1 \n, np.stack((a, b, c), axis1))print (axis 2 \n, np.stack((a, b, c), axis2))a np.arange(1, 10).reshape(3,3)print (a)b a 10print (b)print (np.dot(a, b)) # dot 正常的矩阵乘法print (a * b) # * 对应元素的相乘a np.arange(1, 10)print (a)b np.arange(20,25)print (b)print (np.concatenate((a, b)))5.绘图5.1 绘制正态分布概率密度函数# 自定义字体使中文正常显示mpl.rcParams[font.sans-serif] [uSimHei] #FangSong/黑体 FangSong/KaiTimpl.rcParams[axes.unicode_minus] Falsemu 0sigma 1x np.linspace(mu - 3 * sigma, mu 3 * sigma, 51)y np.exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma)print (x.shape)print (x \n, x)print (y.shape)print (y \n, y)plt.figure(facecolorw) # 背景色设置为白色# plt.plot(x, y, ro-, linewidth2)plt.plot(x, y, r-, x, y, go, linewidth2, markersize8)plt.xlabel(X, fontsize15)plt.ylabel(Y, fontsize15)plt.title(u高斯分布函数, fontsize18)plt.grid(True)plt.show()5.2 损失函数# Logistic损失(-1,1)/SVM Hinge损失/ 0/1损失plt.figure(figsize(10,8),dpi100) # 指定图像尺寸和dpix np.array(np.linspace(start-2, stop3, num1001, dtypenp.float))y_logit np.log(1 np.exp(-x)) / math.log(2)y_boost np.exp(-x)y_01 x 0y_hinge 1.0 - xy_hinge[y_hinge 0] 0plt.plot(x, y_logit, r-, labelLogistic Loss, linewidth2)plt.plot(x, y_01, g-, label0/1 Loss, linewidth2)plt.plot(x, y_hinge, b-, labelHinge Loss, linewidth2)plt.plot(x, y_boost, m--, labelAdaboost Loss, linewidth2)plt.grid() # 画格子出来plt.legend(locupper right) # 图例显示位置plt.savefig(1.png)plt.show()5.3 x^xdef f(x):y np.ones_like(x)i x 0y[i] np.power(x[i], x[i])i x 0y[i] np.power(-x[i], -x[i])return yx np.linspace(-1.3, 1.3, 101)y f(x)plt.plot(x, y, g-, labelx^x, linewidth2)plt.grid()plt.legend(locupper left)plt.show()5.4 胸型线x np.arange(1, 0, -0.001)y (-3 * x * np.log(x) np.exp(-(40 * (x - 1 / np.e)) ** 4) / 25) / 2plt.figure(figsize(5,7), facecolorw)plt.plot(y, x, r-, linewidth2)plt.grid(True)plt.title(u胸型线, fontsize20)# plt.savefig(breast.png)plt.show()5.5 心形线t np.linspace(0, 2*np.pi, 100)x 16 * np.sin(t) ** 3y 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)plt.plot(x, y, r-, linewidth2)plt.grid(True)plt.show()5.6 渐开线t np.linspace(0, 50, num1000)x t*np.sin(t) np.cos(t)y np.sin(t) - t*np.cos(t)plt.plot(x, y, r-, linewidth2)plt.grid()plt.show()5.7Barx np.arange(0, 10, 0.1)y np.sin(x)plt.bar(x, y, width0.04, linewidth0.2)plt.plot(x, y, r--, linewidth2)plt.title(uSin曲线)plt.xticks(rotation-60)plt.xlabel(X)plt.ylabel(Y)plt.grid()plt.show()6. 概率分布6.1 均匀分布x np.random.rand(10000)t np.arange(len(x))# plt.hist(x, 30, color#000000, alpha0.5, labelu均匀分布) # alpha透明度plt.plot(t, x, g., labelu均匀分布) # .小点, o 圈, - 线plt.legend(locupper left)plt.grid()plt.show()6.2 验证中心极限定理t 1000a np.zeros(10000)for i in range(t):a np.random.uniform(-5, 5, 10000)a / tplt.hist(a, bins30, colorg, alpha0.5, normedTrue, labelu均匀分布叠加)plt.legend(locupper left)plt.grid()plt.show()# 6.21 其他分布的中心极限定理lamda 10p stats.poisson(lamda)y p.rvs(size1000)mx 30r (0, mx)bins r[1] - r[0]plt.figure(figsize(10, 8), facecolorw)plt.subplot(121)plt.hist(y, binsbins, ranger, colorg, alpha0.8, normedTrue)t np.arange(0, mx1)plt.plot(t, p.pmf(t), ro-, lw2)plt.grid(True)N 1000M 10000plt.subplot(122)a np.zeros(M, dtypenp.float)p stats.poisson(lamda)for i in np.arange(N):y p.rvs(sizeM)a ya / Nplt.hist(a, bins20, colorg, alpha0.8, normedTrue)plt.grid(bTrue)plt.show()6.3 Poisson分布x np.random.poisson(lam5, size10000)print (x)pillar 15a plt.hist(x, binspillar, normedTrue, range[0, pillar], colorg, alpha0.5)plt.grid()# plt.show()print (a)print (a[0].sum())6.4 直方图的使用mu 2sigma 3data mu sigma * np.random.randn(1000)h plt.hist(data, 30, normed1, color#a0a0ff)x h[1]y norm.pdf(x, locmu, scalesigma)plt.plot(x, y, r--, x, y, ro, linewidth2, markersize4)plt.grid()plt.show()6.5 插值rv poisson(5)x1 a[1]y1 rv.pmf(x1)itp BarycentricInterpolator(x1, y1) # 重心插值x2 np.linspace(x.min(), x.max(), 50)y2 itp(x2)cs scipy.interpolate.CubicSpline(x1, y1) # 三次样条插值plt.plot(x2, cs(x2), m--, linewidth5, labelCubicSpine) # 三次样条插值plt.plot(x2, y2, g-, linewidth3, labelBarycentricInterpolator) # 重心插值plt.plot(x1, y1, r-, linewidth1, labelActural Value) # 原始值plt.legend(locupper right)plt.grid()plt.show()7. 绘制三维图像# x, y np.ogrid[-3:3:100j, -3:3:100j]# print(x,y)u np.linspace(-3, 3, 101)x, y np.meshgrid(u, u)z x*y*np.exp(-(x**2 y**2)/2) / math.sqrt(2*math.pi)# z x*y*np.exp(-(x**2 y**2)/2) / math.sqrt(2*math.pi)fig plt.figure()ax fig.add_subplot(111, projection3d)# ax.plot_surface(x, y, z, rstride5, cstride5, cmapcm.coolwarm, linewidth0.1) #ax.plot_surface(x, y, z, rstride5, cstride5, cmapcm.Accent, linewidth0.5)plt.show()# cmaps [(Perceptually Uniform Sequential,# [viridis, inferno, plasma, magma]),# (Sequential, [Blues, BuGn, BuPu,# GnBu, Greens, Greys, Oranges, OrRd,# PuBu, PuBuGn, PuRd, Purples, RdPu,# Reds, YlGn, YlGnBu, YlOrBr, YlOrRd]),# (Sequential (2), [afmhot, autumn, bone, cool,# copper, gist_heat, gray, hot,# pink, spring, summer, winter]),# (Diverging, [BrBG, bwr, coolwarm, PiYG, PRGn, PuOr,# RdBu, RdGy, RdYlBu, RdYlGn, Spectral,# seismic]),# (Qualitative, [Accent, Dark2, Paired, Pastel1,# Pastel2, Set1, Set2, Set3]),# (Miscellaneous, [gist_earth, terrain, ocean, gist_stern,# brg, CMRmap, cubehelix,# gnuplot, gnuplot2, gist_ncar,# nipy_spectral, jet, rainbow,# gist_rainbow, hsv, flag, prism])]欢迎关注我的公众号新手入门资料。wechat.jpg