-
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的维数):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190428205545454.png)
定义一个目标函数(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这几节听的我一脚懵逼啊,建议关于这个的几节跳过自己差文档学习吧查看全部
举报