diff --git a/Python/matplotlab/pyplot_attr.md b/Python/matplotlab/pyplot_attr.md
deleted file mode 100644
index 959cf746..00000000
--- a/Python/matplotlab/pyplot_attr.md
+++ /dev/null
@@ -1,279 +0,0 @@
-# 面向对象的绘图方式
-
-
-## 配置参数
-
-* axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
-* figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
-* font: 字体集(font family)、字体大小和样式设置
-* grid: 设置网格颜色和线性
-* legend: 设置图例和其中的文本的显示
-* line: 设置线条(颜色、线型、宽度等)和标记
-* patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
-* savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
-* verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
-* xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
-
-
-## 线条风格
-
-线条风格linestyle或ls | 描述
-----|---
-‘-‘ |实线
-‘:’ |虚线
-‘–’ |破折线
-‘None’,’ ‘,’’ |什么都不画
-‘-.’ |点划线
-
-## 线条标记
-
-标记maker | 描述
-----|----
-‘o’ |圆圈
-‘.’ |点
-‘D’ |菱形
-‘s’ |正方形
-‘h’ |六边形1
-‘*’ |星号
-‘H’ |六边形2
-‘d’ |小菱形
-‘_’ | 水平线
-‘v’ |一角朝下的三角形
-‘8’ |八边形
-‘<’ | 一角朝左的三角形
-‘p’ |五边形
-‘>’ |一角朝右的三角形
-‘,’ |像素
-‘^’ | 一角朝上的三角形
-‘+’ | 加号
-‘\ ‘ |竖线
-‘None’,’’,’ ‘ |无
-‘x’ | X
-
-
-## 颜色
-
-别名 | 颜色
----|---
-b | 蓝色
-g |绿色
-r |红色
-y |黄色
-c |青色
-k |黑色
-m |洋红色
-w |白色
-
-
-## 绘图步骤
-
-```py
-#使用numpy产生数据
-x=np.arange(-5,5,0.1)
-y=x*3
-
-#创建窗口、子图
-#方法1:先创建窗口,再创建子图。(一定绘制)
-fig = plt.figure(num=1, figsize=(15, 8),dpi=80) #开启一个窗口,同时设置大小,分辨率
-ax1 = fig.add_subplot(2,1,1) #通过fig添加子图,参数:行数,列数,第几个。
-ax2 = fig.add_subplot(2,1,2) #通过fig添加子图,参数:行数,列数,第几个。
-print(fig,ax1,ax2)
-#方法2:一次性创建窗口和多个子图。(空白不绘制)
-fig,axarr = plt.subplots(4,1) #开一个新窗口,并添加4个子图,返回子图数组
-ax1 = axarr[0] #通过子图数组获取一个子图
-print(fig,ax1)
-#方法3:一次性创建窗口和一个子图。(空白不绘制)
-ax1 = plt.subplot(1,1,1,facecolor='white') #开一个新窗口,创建1个子图。facecolor设置背景颜色
-print(ax1)
-#获取对窗口的引用,适用于上面三种方法
-# fig = plt.gcf() #获得当前figure
-# fig=ax1.figure #获得指定子图所属窗口
-
-# fig.subplots_adjust(left=0) #设置窗口左内边距为0,即左边留白为0。
-
-#设置子图的基本元素
-ax1.set_title('python-drawing') #设置图体,plt.title
-ax1.set_xlabel('x-name') #设置x轴名称,plt.xlabel
-ax1.set_ylabel('y-name') #设置y轴名称,plt.ylabel
-plt.axis([-6,6,-10,10]) #设置横纵坐标轴范围,这个在子图中被分解为下面两个函数
-ax1.set_xlim(-5,5) #设置横轴范围,会覆盖上面的横坐标,plt.xlim
-ax1.set_ylim(-10,10) #设置纵轴范围,会覆盖上面的纵坐标,plt.ylim
-
-xmajorLocator = MultipleLocator(2) #定义横向主刻度标签的刻度差为2的倍数。就是隔几个刻度才显示一个标签文本
-ymajorLocator = MultipleLocator(3) #定义纵向主刻度标签的刻度差为3的倍数。就是隔几个刻度才显示一个标签文本
-
-ax1.xaxis.set_major_locator(xmajorLocator) #x轴 应用定义的横向主刻度格式。如果不应用将采用默认刻度格式
-ax1.yaxis.set_major_locator(ymajorLocator) #y轴 应用定义的纵向主刻度格式。如果不应用将采用默认刻度格式
-
-ax1.xaxis.grid(True, which='major') #x坐标轴的网格使用定义的主刻度格式
-ax1.yaxis.grid(True, which='major') #x坐标轴的网格使用定义的主刻度格式
-
-ax1.set_xticks([]) #去除坐标轴刻度
-ax1.set_xticks((-5,-3,-1,1,3,5)) #设置坐标轴刻度
-ax1.set_xticklabels(labels=['x1','x2','x3','x4','x5'],rotation=-30,fontsize='small') #设置刻度的显示文本,rotation旋转角度,fontsize字体大小
-
-plot1=ax1.plot(x,y,marker='o',color='g',label='legend1') #点图:marker图标
-plot2=ax1.plot(x,y,linestyle='--',alpha=0.5,color='r',label='legend2') #线图:linestyle线性,alpha透明度,color颜色,label图例文本
-
-ax1.legend(loc='upper left') #显示图例,plt.legend()
-ax1.text(2.8, 7, r'y=3*x') #指定位置显示文字,plt.text()
-ax1.annotate('important point', xy=(2, 6), xytext=(3, 1.5), #添加标注,参数:注释文本、指向点、文字位置、箭头属性
- arrowprops=dict(facecolor='black', shrink=0.05),
- )
-#显示网格。which参数的值为major(只绘制大刻度)、minor(只绘制小刻度)、both,默认值为major。axis为'x','y','both'
-ax1.grid(b=True,which='major',axis='both',alpha= 0.5,color='skyblue',linestyle='--',linewidth=2)
-
-axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #在当前窗口添加一个子图,rect=[左, 下, 宽, 高],是使用的绝对布局,不和以存在窗口挤占空间
-axes1.plot(x,y) #在子图上画图
-plt.savefig('aa.jpg',dpi=400,bbox_inches='tight') #savefig保存图片,dpi分辨率,bbox_inches子图周边白色空间的大小
-plt.show() #打开窗口,对于方法1创建在窗口一定绘制,对于方法2方法3创建的窗口,若坐标系全部空白,则不绘制
-
-```
-
-## plot属性
-
-```py
-属性 值类型
-alpha 浮点值
-animated [True / False]
-antialiased or aa [True / False]
-clip_box matplotlib.transform.Bbox 实例
-clip_on [True / False]
-clip_path Path 实例, Transform,以及Patch实例
-color or c 任何 matplotlib 颜色
-contains 命中测试函数
-dash_capstyle ['butt' / 'round' / 'projecting']
-dash_joinstyle ['miter' / 'round' / 'bevel']
-dashes 以点为单位的连接/断开墨水序列
-data (np.array xdata, np.array ydata)
-figure matplotlib.figure.Figure 实例
-label 任何字符串
-linestyle or ls [ '-' / '--' / '-.' / ':' / 'steps' / ...]
-linewidth or lw 以点为单位的浮点值
-lod [True / False]
-marker [ '+' / ',' / '.' / '1' / '2' / '3' / '4' ]
-markeredgecolor or mec 任何 matplotlib 颜色
-markeredgewidth or mew 以点为单位的浮点值
-markerfacecolor or mfc 任何 matplotlib 颜色
-markersize or ms 浮点值
-markevery [ None / 整数值 / (startind, stride) ]
-picker 用于交互式线条选择
-pickradius 线条的拾取选择半径
-solid_capstyle ['butt' / 'round' / 'projecting']
-solid_joinstyle ['miter' / 'round' / 'bevel']
-transform matplotlib.transforms.Transform 实例
-visible [True / False]
-xdata np.array
-ydata np.array
-zorder 任何数值
-```
-
-## 多图绘制
-
-```py
-#一个窗口,多个图,多条数据
-sub1=plt.subplot(211,facecolor=(0.1843,0.3098,0.3098)) #将窗口分成2行1列,在第1个作图,并设置背景色
-sub2=plt.subplot(212) #将窗口分成2行1列,在第2个作图
-sub1.plot(x,y) #绘制子图
-sub2.plot(x,y) #绘制子图
-
-axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #添加一个子坐标系,rect=[左, 下, 宽, 高]
-plt.plot(x,y) #绘制子坐标系,
-axes2 = plt.axes([0.7, .2, .1, .1], facecolor='y') #添加一个子坐标系,rect=[左, 下, 宽, 高]
-plt.plot(x,y)
-plt.show()
-```
-## 极坐标
-
-```py
-fig = plt.figure(2) #新开一个窗口
-ax1 = fig.add_subplot(1,2,1,polar=True) #启动一个极坐标子图
-theta=np.arange(0,2*np.pi,0.02) #角度数列值
-ax1.plot(theta,2*np.ones_like(theta),lw=2) #画图,参数:角度,半径,lw线宽
-ax1.plot(theta,theta/6,linestyle='--',lw=2) #画图,参数:角度,半径,linestyle样式,lw线宽
-
-ax2 = fig.add_subplot(1,2,2,polar=True) #启动一个极坐标子图
-ax2.plot(theta,np.cos(5*theta),linestyle='--',lw=2)
-ax2.plot(theta,2*np.cos(4*theta),lw=2)
-
-ax2.set_rgrids(np.arange(0.2,2,0.2),angle=45) #距离网格轴,轴线刻度和显示位置
-ax2.set_thetagrids([0,45,90]) #角度网格轴,范围0-360度
-
-plt.show()
-```
-
-## 柱状图
-
-```py
-plt.figure(3)
-x_index = np.arange(5) #柱的索引
-x_data = ('A', 'B', 'C', 'D', 'E')
-y1_data = (20, 35, 30, 35, 27)
-y2_data = (25, 32, 34, 20, 25)
-bar_width = 0.35 #定义一个数字代表每个独立柱的宽度
-
-rects1 = plt.bar(x_index, y1_data, width=bar_width,alpha=0.4, color='b',label='legend1') #参数:左偏移、高度、柱宽、透明度、颜色、图例
-rects2 = plt.bar(x_index + bar_width, y2_data, width=bar_width,alpha=0.5,color='r',label='legend2') #参数:左偏移、高度、柱宽、透明度、颜色、图例
-#关于左偏移,不用关心每根柱的中心不中心,因为只要把刻度线设置在柱的中间就可以了
-plt.xticks(x_index + bar_width/2, x_data) #x轴刻度线
-plt.legend() #显示图例
-plt.tight_layout() #自动控制图像外部边缘,此方法不能够很好的控制图像间的间隔
-plt.show()
-```
-
-## 直方图
-
-```py
-fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6)) #在窗口上添加2个子图
-sigma = 1 #标准差
-mean = 0 #均值
-x=mean+sigma*np.random.randn(10000) #正态分布随机数
-ax0.hist(x,bins=40,normed=False,histtype='bar',facecolor='yellowgreen',alpha=0.75) #normed是否归一化,histtype直方图类型,facecolor颜色,alpha透明度
-ax1.hist(x,bins=20,normed=1,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8) #bins柱子的个数,cumulative是否计算累加分布,rwidth柱子宽度
-plt.show() #所有窗口运行
-```
-
-## 散点图
-
-```py
-fig = plt.figure(4) #添加一个窗口
-ax =fig.add_subplot(1,1,1) #在窗口上添加一个子图
-x=np.random.random(100) #产生随机数组
-y=np.random.random(100) #产生随机数组
-ax.scatter(x,y,s=x*1000,c='y',marker=(5,1),alpha=0.5,lw=2,facecolors='none') #x横坐标,y纵坐标,s图像大小,c颜色,marker图片,lw图像边框宽度
-plt.show() #所有窗口运行
-```
-
-## 三维图
-
-```py
-fig = plt.figure(5)
-ax=fig.add_subplot(1,1,1,projection='3d') #绘制三维图
-
-x,y=np.mgrid[-2:2:20j,-2:2:20j] #获取x轴数据,y轴数据
-z=x*np.exp(-x**2-y**2) #获取z轴数据
-
-ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8) #绘制三维图表面
-ax.set_xlabel('x-name') #x轴名称
-ax.set_ylabel('y-name') #y轴名称
-ax.set_zlabel('z-name') #z轴名称
-
-plt.show()
-```
-
-## 集合图形
-
-```py
-fig = plt.figure(6) #创建一个窗口
-ax=fig.add_subplot(1,1,1) #添加一个子图
-rect1 = plt.Rectangle((0.1,0.2),0.2,0.3,color='r') #创建一个矩形,参数:(x,y),width,height
-circ1 = plt.Circle((0.7,0.2),0.15,color='r',alpha=0.3) #创建一个椭圆,参数:中心点,半径,默认这个圆形会跟随窗口大小进行长宽压缩
-pgon1 = plt.Polygon([[0.45,0.45],[0.65,0.6],[0.2,0.6]]) #创建一个多边形,参数:每个顶点坐标
-
-ax.add_patch(rect1) #将形状添加到子图上
-ax.add_patch(circ1) #将形状添加到子图上
-ax.add_patch(pgon1) #将形状添加到子图上
-
-fig.canvas.draw() #子图绘制
-plt.show()
-```
\ No newline at end of file
diff --git a/Python/matplotlab/pyplot_function.md b/Python/matplotlab/学习教程/01pyplot方法列表.md
similarity index 100%
rename from Python/matplotlab/pyplot_function.md
rename to Python/matplotlab/学习教程/01pyplot方法列表.md
diff --git a/Python/matplotlab/学习教程/02面向对象绘图实例.md b/Python/matplotlab/学习教程/02面向对象绘图实例.md
new file mode 100644
index 00000000..a70196fe
--- /dev/null
+++ b/Python/matplotlab/学习教程/02面向对象绘图实例.md
@@ -0,0 +1,359 @@
+# 面向对象的绘图方式
+
+> 在这里的实例中,面向对象的方法与命令行的方式进行了混用,不提倡。首先运用好交互式命令行的方式进行绘图。
+
+## 配置参数
+
+* axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
+* figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
+* font: 字体集(font family)、字体大小和样式设置
+* grid: 设置网格颜色和线性
+* legend: 设置图例和其中的文本的显示
+* line: 设置线条(颜色、线型、宽度等)和标记
+* patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
+* savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
+* verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
+* xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
+
+
+## 线条风格
+
+线条风格linestyle或ls | 描述
+----|---
+‘-‘ |实线
+‘:’ |虚线
+‘–’ |破折线
+‘None’,’ ‘,’’ |什么都不画
+‘-.’ |点划线
+
+## 线条标记
+
+标记maker | 描述
+----|----
+‘o’ |圆圈
+‘.’ |点
+‘D’ |菱形
+‘s’ |正方形
+‘h’ |六边形1
+‘*’ |星号
+‘H’ |六边形2
+‘d’ |小菱形
+‘_’ | 水平线
+‘v’ |一角朝下的三角形
+‘8’ |八边形
+‘<’ | 一角朝左的三角形
+‘p’ |五边形
+‘>’ |一角朝右的三角形
+‘,’ |像素
+‘^’ | 一角朝上的三角形
+‘+’ | 加号
+‘\ ‘ |竖线
+‘None’,’’,’ ‘ |无
+‘x’ | X
+
+
+## 颜色
+
+别名 | 颜色
+---|---
+b | 蓝色
+g |绿色
+r |红色
+y |黄色
+c |青色
+k |黑色
+m |洋红色
+w |白色
+
+
+## 绘图步骤
+
+```py
+#使用numpy产生数据
+x=np.arange(-5,5,0.1)
+y=x*3
+
+#创建窗口、子图
+#方法1:先创建窗口,再创建子图。(一定绘制)
+fig = plt.figure(num=1, figsize=(15, 8),dpi=80)
+#开启一个窗口,同时设置大小,分辨率
+ax1 = fig.add_subplot(2,1,1)
+#通过fig添加子图,参数:行数,列数,第几个。
+ax2 = fig.add_subplot(2,1,2)
+#通过fig添加子图,参数:行数,列数,第几个。
+print(fig,ax1,ax2)
+#方法2:一次性创建窗口和多个子图。(空白不绘制)
+fig,axarr = plt.subplots(4,1)
+#开一个新窗口,并添加4个子图,返回子图数组
+ax1 = axarr[0]
+#通过子图数组获取一个子图
+print(fig,ax1)
+#方法3:一次性创建窗口和一个子图。(空白不绘制)
+ax1 = plt.subplot(1,1,1,facecolor='white')
+
+#开一个新窗口,创建1个子图。facecolor设置背景颜色
+print(ax1)
+#获取对窗口的引用,适用于上面三种方法
+# fig = plt.gcf() #获得当前figure
+# fig=ax1.figure #获得指定子图所属窗口
+
+# fig.subplots_adjust(left=0)
+#设置窗口左内边距为0,即左边留白为0。
+
+#设置子图的基本元素
+ax1.set_title('python-drawing')
+#设置图体,plt.title
+ax1.set_xlabel('x-name')
+#设置x轴名称,plt.xlabel
+ax1.set_ylabel('y-name')
+#设置y轴名称,plt.ylabel
+plt.axis([-6,6,-10,10])
+#设置横纵坐标轴范围,这个在子图中被分解为下面两个函数
+ax1.set_xlim(-5,5)
+#设置横轴范围,会覆盖上面的横坐标,plt.xlim
+ax1.set_ylim(-10,10)
+#设置纵轴范围,会覆盖上面的纵坐标,plt.ylim
+
+xmajorLocator = MultipleLocator(2)
+#定义横向主刻度标签的刻度差为2的倍数。就是隔几个刻度才显示一个标签文本
+ymajorLocator = MultipleLocator(3)
+#定义纵向主刻度标签的刻度差为3的倍数。就是隔几个刻度才显示一个标签文本
+
+ax1.xaxis.set_major_locator(xmajorLocator)
+#x轴 应用定义的横向主刻度格式。如果不应用将采用默认刻度格式
+ax1.yaxis.set_major_locator(ymajorLocator)
+#y轴 应用定义的纵向主刻度格式。如果不应用将采用默认刻度格式
+
+ax1.xaxis.grid(True, which='major')
+#x坐标轴的网格使用定义的主刻度格式
+ax1.yaxis.grid(True, which='major')
+#x坐标轴的网格使用定义的主刻度格式
+
+ax1.set_xticks([])
+#去除坐标轴刻度
+ax1.set_xticks((-5,-3,-1,1,3,5))
+#设置坐标轴刻度
+ax1.set_xticklabels(labels=['x1','x2','x3','x4','x5'],rotation=-30,fontsize='small')
+#设置刻度的显示文本,rotation旋转角度,fontsize字体大小
+
+plot1=ax1.plot(x,y,marker='o',color='g',label='legend1')
+#点图:marker图标
+plot2=ax1.plot(x,y,linestyle='--',alpha=0.5,color='r',label='legend2')
+#线图:linestyle线性,alpha透明度,color颜色,label图例文本
+
+ax1.legend(loc='upper left')
+#显示图例,plt.legend()
+ax1.text(2.8, 7, r'y=3*x')
+#指定位置显示文字,plt.text()
+ax1.annotate('important point', xy=(2, 6), xytext=(3, 1.5), arrowprops=dict(facecolor='black', shrink=0.05),)
+#添加标注,参数:注释文本、指向点、文字位置、箭头属性
+#显示网格。which参数的值为major(只绘制大刻度)、minor(只绘制小刻度)、both,默认值为major。axis为'x','y','both'
+ax1.grid(b=True,which='major',axis='both',alpha= 0.5,color='skyblue',linestyle='--',linewidth=2)
+
+axes1 = plt.axes([.2, .3, .1, .1], facecolor='y')
+#在当前窗口添加一个子图,rect=[左, 下, 宽, 高],是使用的绝对布局,不和以存在窗口挤占空间
+axes1.plot(x,y)
+#在子图上画图
+plt.savefig('aa.jpg',dpi=400,bbox_inches='tight')
+#savefig保存图片,dpi分辨率,bbox_inches子图周边白色空间的大小
+plt.show()
+#打开窗口,对于方法1创建在窗口一定绘制,对于方法2方法3创建的窗口,若坐标系全部空白,则不绘制
+
+```
+
+## plot属性
+
+```py
+属性 值类型
+alpha 浮点值
+animated [True / False]
+antialiased or aa [True / False]
+clip_box matplotlib.transform.Bbox 实例
+clip_on [True / False]
+clip_path Path 实例, Transform,以及Patch实例
+color or c 任何 matplotlib 颜色
+contains 命中测试函数
+dash_capstyle ['butt' / 'round' / 'projecting']
+dash_joinstyle ['miter' / 'round' / 'bevel']
+dashes 以点为单位的连接/断开墨水序列
+data (np.array xdata, np.array ydata)
+figure matplotlib.figure.Figure 实例
+label 任何字符串
+linestyle or ls [ '-' / '--' / '-.' / ':' / 'steps' / ...]
+linewidth or lw 以点为单位的浮点值
+lod [True / False]
+marker [ '+' / ',' / '.' / '1' / '2' / '3' / '4' ]
+markeredgecolor or mec 任何 matplotlib 颜色
+markeredgewidth or mew 以点为单位的浮点值
+markerfacecolor or mfc 任何 matplotlib 颜色
+markersize or ms 浮点值
+markevery [ None / 整数值 / (startind, stride) ]
+picker 用于交互式线条选择
+pickradius 线条的拾取选择半径
+solid_capstyle ['butt' / 'round' / 'projecting']
+solid_joinstyle ['miter' / 'round' / 'bevel']
+transform matplotlib.transforms.Transform 实例
+visible [True / False]
+xdata np.array
+ydata np.array
+zorder 任何数值
+```
+
+## 多图绘制
+
+```py
+#一个窗口,多个图,多条数据
+sub1=plt.subplot(211,facecolor=(0.1843,0.3098,0.3098))
+#将窗口分成2行1列,在第1个作图,并设置背景色
+sub2=plt.subplot(212)
+#将窗口分成2行1列,在第2个作图
+sub1.plot(x,y)
+#绘制子图
+sub2.plot(x,y)
+#绘制子图
+
+axes1 = plt.axes([.2, .3, .1, .1], facecolor='y')
+#添加一个子坐标系,rect=[左, 下, 宽, 高]
+plt.plot(x,y)
+#绘制子坐标系,
+axes2 = plt.axes([0.7, .2, .1, .1], facecolor='y')
+#添加一个子坐标系,rect=[左, 下, 宽, 高]
+plt.plot(x,y)
+plt.show()
+```
+## 极坐标
+
+```py
+fig = plt.figure(2)
+#新开一个窗口
+ax1 = fig.add_subplot(1,2,1,polar=True)
+#启动一个极坐标子图
+theta=np.arange(0,2*np.pi,0.02)
+#角度数列值
+ax1.plot(theta,2*np.ones_like(theta),lw=2)
+#画图,参数:角度,半径,lw线宽
+ax1.plot(theta,theta/6,linestyle='--',lw=2)
+#画图,参数:角度,半径,linestyle样式,lw线宽
+
+ax2 = fig.add_subplot(1,2,2,polar=True)
+#启动一个极坐标子图
+ax2.plot(theta,np.cos(5*theta),linestyle='--',lw=2)
+ax2.plot(theta,2*np.cos(4*theta),lw=2)
+
+ax2.set_rgrids(np.arange(0.2,2,0.2),angle=45) #距离网格轴,轴线刻度和显示位置
+ax2.set_thetagrids([0,45,90]) #角度网格轴,范围0-360度
+
+plt.show()
+```
+
+## 柱状图
+
+```py
+plt.figure(3)
+x_index = np.arange(5)
+#柱的索引
+x_data = ('A', 'B', 'C', 'D', 'E')
+y1_data = (20, 35, 30, 35, 27)
+y2_data = (25, 32, 34, 20, 25)
+bar_width = 0.35
+#定义一个数字代表每个独立柱的宽度
+
+rects1 = plt.bar(x_index, y1_data, width=bar_width,alpha=0.4, color='b',label='legend1')
+#参数:左偏移、高度、柱宽、透明度、颜色、图例
+rects2 = plt.bar(x_index + bar_width, y2_data, width=bar_width,alpha=0.5,color='r',label='legend2')
+#参数:左偏移、高度、柱宽、透明度、颜色、图例
+#关于左偏移,不用关心每根柱的中心不中心,因为只要把刻度线设置在柱的中间就可以了
+plt.xticks(x_index + bar_width/2, x_data)
+#x轴刻度线
+plt.legend()
+#显示图例
+plt.tight_layout()
+#自动控制图像外部边缘,此方法不能够很好的控制图像间的间隔
+plt.show()
+```
+
+## 直方图
+
+```py
+fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6))
+#在窗口上添加2个子图
+sigma = 1
+#标准差
+mean = 0
+#均值
+x=mean+sigma*np.random.randn(10000)
+#正态分布随机数
+ax0.hist(x,bins=40,normed=False,histtype='bar',facecolor='yellowgreen',alpha=0.75)
+#normed是否归一化,histtype直方图类型,facecolor颜色,alpha透明度
+ax1.hist(x,bins=20,normed=1,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8)
+#bins柱子的个数,cumulative是否计算累加分布,rwidth柱子宽度
+plt.show()
+#所有窗口运行
+```
+
+## 散点图
+
+```py
+fig = plt.figure(4)
+#添加一个窗口
+ax =fig.add_subplot(1,1,1)
+#在窗口上添加一个子图
+x=np.random.random(100)
+#产生随机数组
+y=np.random.random(100)
+#产生随机数组
+ax.scatter(x,y,s=x*1000,c='y',marker=(5,1),alpha=0.5,lw=2,facecolors='none')
+#x横坐标,y纵坐标,s图像大小,c颜色,marker图片,lw图像边框宽度
+plt.show()
+#所有窗口运行
+```
+
+## 三维图
+
+```py
+fig = plt.figure(5)
+ax=fig.add_subplot(1,1,1,projection='3d')
+#绘制三维图
+
+x,y=np.mgrid[-2:2:20j,-2:2:20j]
+#获取x轴数据,y轴数据
+z=x*np.exp(-x**2-y**2)
+#获取z轴数据
+
+ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8)
+#绘制三维图表面
+ax.set_xlabel('x-name')
+#x轴名称
+ax.set_ylabel('y-name')
+#y轴名称
+ax.set_zlabel('z-name')
+#z轴名称
+
+plt.show()
+```
+
+## 集合图形
+
+```py
+fig = plt.figure(6)
+#创建一个窗口
+ax=fig.add_subplot(1,1,1)
+#添加一个子图
+rect1 = plt.Rectangle((0.1,0.2),0.2,0.3,color='r')
+#创建一个矩形,参数:(x,y),width,height
+circ1 = plt.Circle((0.7,0.2),0.15,color='r',alpha=0.3)
+#创建一个椭圆,参数:中心点,半径,默认这个圆形会跟随窗口大小进行长宽压缩
+pgon1 = plt.Polygon([[0.45,0.45],[0.65,0.6],[0.2,0.6]])
+#创建一个多边形,参数:每个顶点坐标
+
+ax.add_patch(rect1)
+#将形状添加到子图上
+ax.add_patch(circ1)
+#将形状添加到子图上
+ax.add_patch(pgon1)
+#将形状添加到子图上
+
+fig.canvas.draw()
+#子图绘制
+plt.show()
+```
\ No newline at end of file
diff --git a/Python/matplotlab/学习教程/03基本用法.md b/Python/matplotlab/学习教程/03基本用法.md
new file mode 100644
index 00000000..bba0d704
--- /dev/null
+++ b/Python/matplotlab/学习教程/03基本用法.md
@@ -0,0 +1,135 @@
+# 基本用法
+## 本章知识点归纳如下:
+
+* 导入模块:import matplotlib.pyplot as plt
+* 定义图像窗口:plt.figure()
+* 画图:plt.plot(x, y)
+* 定义坐标轴范围:plt.xlim()/plt.ylim()
+* 定义坐标轴名称:plt.xlabel()/plt.ylabel()
+* 定义坐标轴刻度及名称:plt.xticks()/plt.yticks()
+* 设置图像边框颜色:ax = plt.gca() ax.spines[].set_color()
+* 调整刻度位置:ax.xaxis.set_ticks_position()/ax.yaxis.set_ticks_position()
+* 调整边框(坐标轴)位置:ax.spines[].set_position()
+
+## 导入模块
+
+* 使用import导入模块matplotlib.pyplot,并简写成plt;使用import导入模块numpy,并简写成np
+```py
+import matplotlib.pyplot as plt
+import numpy as np
+```
+* 然后创建两组数据,使用np.linspace定义x:范围是(-3,3),个数是50,将产生一组(-3,3)内均匀分布的50个数;(x,y1)表示曲线1,(x,y2)表示曲线2。
+```py
+x = np.linspace(-3, 3, 50)
+y1 = 2*x + 1
+y2 = x**2
+```
+
+## 定义图像窗口并画图
+
+* 在画图前使用plt.figure()定义一个图像窗口:编号为3;大小为(8, 5);这两项参数可缺省。其中,num参数决定了程序运行后弹出的图像窗口名字,但在klab平台下不会显示。接着,我们使用plt.plot画出(x ,y2)曲线;使用plt.plot画(x ,y1)曲线,曲线的颜色属性(color)为红色;曲线的宽度(linewidth)为1.0;曲线的类型(linestyle)为虚线,除了虚线外,大家还可使用以下线性:'-'、'--'、'-.'、':' 。接着,我们使用plt.show()显示图像。
+
+```py
+plt.figure(num=3, figsize=(8, 5))
+plt.plot(x, y2)
+plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
+plt.show()
+```
+
+## 定义坐标轴名称及范围
+* 使用plt.xlim设置x坐标轴范围:(-1, 2); 使用plt.ylim设置y坐标轴范围:(-2, 3); 使用plt.xlabel设置x坐标轴名称:’I am x’; 使用plt.ylabel设置y坐标轴名称:’I am y’;
+```py
+plt.figure(num=3, figsize=(8, 5),)
+plt.plot(x, y2)
+plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
+plt.xlim((-1, 2))
+plt.ylim((-2, 3))
+plt.xlabel('I am x')
+plt.ylabel('I am y')
+plt.show()
+```
+## 定义坐标轴刻度及名称
+
+* 有时候,我们的坐标轴刻度可能并不是一连串的数字,而是一些文字,或者我们想要调整坐标轴的刻度的稀疏,这时,就需要使用plt.xticks()或者plt.yticks()来进行调整:首先,使用np.linspace定义新刻度范围以及个数:范围是(-1,2);个数是5。使用plt.xticks设置x轴刻度:范围是(-1,2);个数是5。使用plt.yticks设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3];对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]。使用plt.show()显示图像。
+```py
+plt.figure(num=3, figsize=(8, 5))
+plt.plot(x, y2)
+plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
+plt.xlim((-1, 2))
+plt.ylim((-2, 3))
+plt.xlabel('I am x')
+plt.ylabel('I am y')
+new_ticks = np.linspace(-1, 2, 5)
+print(new_ticks)
+plt.xticks(new_ticks)
+plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
+plt.show()
+[-1. -0.25 0.5 1.25 2. ]
+```
+## 设置图像边框颜色
+* 细心的小伙伴可能会注意到,我们的图像坐标轴总是由上下左右四条线组成,我们也可以对它们进行修改:首先,使用plt.gca()获取当前坐标轴信息。使用.spines设置边框;使用.set_color设置边框颜色;
+```py
+plt.figure(num=3, figsize=(8, 5))
+plt.plot(x, y2)
+plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
+plt.xlim((-1, 2))
+plt.ylim((-2, 3))
+plt.xticks(new_ticks)
+plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
+ax = plt.gca()
+ax.spines['right'].set_color('none')
+ax.spines['top'].set_color('none')
+plt.show()
+```
+调整刻度及边框位置
+使用.xaxis.set_ticks_position设置x坐标刻度数字或名称的位置:bottom.(所有位置:top,bottom,both,default,none);使用.spines设置边框:x轴;使用.set_position设置边框位置:y=0的位置;(位置所有属性:outward,axes,data)
+
+plt.figure(num=3, figsize=(8, 5))
+plt.plot(x, y2)
+plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
+plt.xlim((-1, 2))
+plt.ylim((-2, 3))
+plt.xticks(new_ticks)
+plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
+ax = plt.gca()
+ax.spines['right'].set_color('none')
+ax.spines['top'].set_color('none')
+ax.xaxis.set_ticks_position('bottom')
+ax.spines['bottom'].set_position(('data', 0))
+plt.show()
+
+使用.yaxis.set_ticks_position设置y坐标刻度数字或名称的位置:left.(所有位置:left,right,both,default,none) 使用.spines设置边框:y轴;使用.set_position设置边框位置:x=0的位置;(位置所有属性:outward,axes,data) 使用plt.show显示图像.
+
+plt.figure(num=3, figsize=(8, 5))
+plt.plot(x, y2)
+plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
+plt.xlim((-1, 2))
+plt.ylim((-2, 3))
+plt.xticks(new_ticks)
+plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
+ax = plt.gca()
+ax.spines['right'].set_color('none')
+ax.spines['top'].set_color('none')
+ax.xaxis.set_ticks_position('bottom')
+ax.spines['bottom'].set_position(('data', 0))
+ax.yaxis.set_ticks_position('left')
+ax.spines['left'].set_position(('data',0))
+plt.show()
+
+练一练
+小伙伴们,以上就是matplotlib的基本用法,是不是比较简单呢?现在,请根据上述所学内容,画出直线 y = x-1, 线型为虚线,线宽为1,纵坐标范围(-2,1),横坐标范围(-1,2),横纵坐标在(0,0)坐标点相交。横坐标的 [-1,-0.5,1] 分别对应 [bad, normal, good]。请一定自己尝试一番再看下面的答案噢~
+
+#答案
+x = np.linspace(-1, 2, 50)
+y = x - 1
+plt.figure()
+plt.plot(x,y, linewidth=1.0, linestyle='--')
+plt.xlim((-1,2))
+plt.ylim((-2,2))
+plt.xticks([-1,-0.5,1],['bad', 'normal', 'good'])
+ax = plt.gca()
+ax.spines['top'].set_color('none')
+ax.spines['right'].set_color('none')
+ax.spines['left'].set_position(('data',0))
+ax.spines['bottom'].set_position(('data',0))
+plt.show()
\ No newline at end of file
diff --git a/Python/matplotlab/学习教程/test1.py b/Python/matplotlab/学习教程/test1.py
new file mode 100644
index 00000000..d57e773a
--- /dev/null
+++ b/Python/matplotlab/学习教程/test1.py
@@ -0,0 +1,33 @@
+# changshi
+import numpy as np
+import matplotlib.pyplot as plt
+
+# 定义数据集
+x = np.linspace(-3,3,50)
+y1 = 2*x+1
+y2 = x**2
+
+
+# 绘制图像
+plt.figure(num=3,figsize=(10,10))
+plt.plot(x,y1)
+plt.plot(x,y2,color='red',linewidth=1,linestyle='--')
+
+# 定义坐标轴的范围及名称
+plt.xlim((-5,5))
+plt.ylim((0,10))
+
+plt.xlabel('i am x')
+plt.ylabel('i am y')
+
+# 刻度
+ticks = np.linspace(-1,2,5)
+plt.xticks(ticks)
+plt.yticks([-2,-1.8,-1,1.22,3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
+
+# 设置边框颜色
+ax = plt.gca()
+ax.spines['right'].set_color('none')
+ax.spines['top'].set_color('none')
+# 展示图像
+plt.show()
\ No newline at end of file
diff --git a/Python/numpy/20随机数.md b/Python/numpy/20随机数.md
new file mode 100644
index 00000000..17a3efad
--- /dev/null
+++ b/Python/numpy/20随机数.md
@@ -0,0 +1,703 @@
+# 使用numpy产生随机数
+numpy中的random模块包含了很多方法可以用来产生随机数,这篇文章将对random中的一些常用方法做一个总结。
+
+## 1、numpy.random.rand(d0, d1, ..., dn)
+* 作用:产生一个给定形状的数组(其实应该是ndarray对象或者是一个单值),数组中的值服从[0, 1)之间的均匀分布。
+* 参数:d0, d, ..., dn : int,可选。如果没有参数则返回一个float型的随机数,该随机数服从[0, 1)之间的均匀分布。
+* 返回值:ndarray对象或者一个float型的值
+例子:
+```py
+# [0, 1)之间均匀分布的随机数,3行2列
+a = np.random.rand(3, 2)
+print(a)
+# 不提供形状
+b = np.random.rand()
+print(b)
+输出:
+
+[[0.26054323 0.28184468]
+ [0.7783674 0.71733674]
+ [0.90302256 0.49303252]]
+0.6022098740124009
+```
+## 2、numpy.random.uniform(low=0.0, high=1.0, size=None)
+* 作用:返回一个在区间[low, high)中均匀分布的数组,size指定形状。
+* 参数:
+ * low, high:float型或者float型的类数组对象。指定抽样区间为[low, high),low的默认值为0.0,hign的默认值为1.0
+ * size:int型或int型元组。指定形状,如果不提供size,则返回一个服从该分布的随机数。
+例子:
+```py
+# 在[1, 10)之间均匀抽样,数组形状为3行2列
+a = np.random.uniform(1, 10, (3, 2))
+print(a)
+# 不提供size
+b = np.random.uniform(1, 10)
+print(b)
+输出:
+
+[[5.16545387 6.3769087 ]
+ [9.98964899 7.88833885]
+ [1.37173855 4.19855075]]
+3.899250175275188
+```
+## 3、numpy.random.randn(d0, d1, ..., dn)
+* 作用:返回一个指定形状的数组,数组中的值服从标准正态分布(均值为0,方差为1)。
+* 参数:d0, d, ..., dn : int,可选。如果没有参数,则返回一个服从标准正态分布的float型随机数。
+* 返回值:ndarray对象或者float
+例子:
+```py
+# 3行2列
+a = np.random.randn(3, 2)
+print(a)
+# 不提供形状
+b = np.random.randn()
+print(b)
+输出:
+
+[[-1.46605527 0.35434705]
+ [ 0.43408199 0.02689309]
+ [ 0.48041554 1.62665755]]
+-0.6291254375915813
+```
+
+## 4、numpy.random.normal(loc=0.0, scale=1.0, size=None)
+* 作用:返回一个由size指定形状的数组,数组中的值服从 μ=loc,σ=scale 的正态分布。
+* 参数:
+ * loc : float型或者float型的类数组对象,指定均值 μ
+ * scale : float型或者float型的类数组对象,指定标准差 σ
+ * size : int型或者int型的元组,指定了数组的形状。如果不提供size,且loc和scale为标量(不是类数组对象),则返回一个服从该分布的随机数。
+* 输出:ndarray对象或者一个标量
+例子:
+```py
+# 标准正态分布,3行2列
+a = np.random.normal(0, 1, (3, 2))
+print(a)
+# 均值为1,标准差为3
+b = np.random.normal(1, 3)
+print(b)
+输出:
+
+[[ 0.34912031 -0.08757564]
+ [-0.99753101 0.37441719]
+ [ 2.68072286 -1.03663963]]
+5.770831320998463
+```
+## 5、numpy.random.randint(low, high=None, size=None, dtype='l')
+* 作用:返回一个在区间[low, high)中离散均匀抽样的数组,size指定形状,dtype指定数据类型。
+* 参数:
+ * low, high:int型,指定抽样区间[low, high)
+ * size:int型或int型的元组,指定形状
+ * dypte:可选参数,指定数据类型,比如int,int64等,默认是np.int
+* 返回值:如果指定了size,则返回一个int型的ndarray对象,否则返回一个服从该分布的int型随机数。
+例子:
+```py
+# 在[1, 10)之间离散均匀抽样,数组形状为3行2列
+a = np.random.randint(1, 10, (3, 2))
+print(a)
+# 不提供size
+b = np.random.randint(1, 10)
+print(b)
+# 指定dtype
+c = np.random.randint(1, 10, dtype=np.int64)
+print(c)
+type(c)
+输出:
+
+[[3 1]
+ [3 3]
+ [5 8]]
+6
+2
+numpy.int64
+```
+
+## 6、numpy.random.random(size=None)
+* 作用:返回从[0, 1)之间均匀抽样的数组,size指定形状。
+* 参数:
+ * size:int型或int型的元组,如果不提供则返回一个服从该分布的随机数
+* 返回值:float型或者float型的ndarray对象
+* 例子:
+```py
+# [0, 1)之间的均匀抽样,3行2列
+a = np.random.random((3, 2))
+print(a)
+# 不指定size
+b = np.random.random()
+print(b)
+输出:
+
+[[0.80136714 0.63129059]
+ [0.04556679 0.04433006]
+ [0.09643599 0.53312761]]
+0.32828505898057136
+```
+
+# numpy API
+
+## 简单的随机数据
+
+
+
随机抽样 (numpy.random )
+
+
简单的随机数据
+
+
+
+
+rand (d0, d1, ..., dn)
+
+
+随机值
+
+
>>> np.random.rand(3,2)
+array([[ 0.14022471, 0.96360618], #random
+ [ 0.37601032, 0.25528411], #random
+ [ 0.49313049, 0.94909878]]) #random
+
+
+
+
+
+randn (d0, d1, ..., dn)
+
+
+返回一个样本,具有标准正态分布。
+Notes
+For random samples from , use:
+
+
sigma * np.random.randn(...) + mu
+
+Examples
+
+
>>> np.random.randn()
+2.1923875335537315 #random
+
+Two-by-four array of samples from N(3, 6.25):
+
+
>>> 2.5 * np.random.randn(2, 4) + 3
+array([[-4.49401501, 4.00950034, -1.81814867, 7.29718677], #random
+ [ 0.39924804, 4.68456316, 4.99394529, 4.84057254]]) #random
+
+
+
+
+
+randint (low[, high, size])
+
+
+返回随机的整数,位于半开区间 [low, high)。
+
+
>>> np.random.randint(2, size=10)
+array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])
+>>> np.random.randint(1, size=10)
+array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
+
+Generate a 2 x 4 array of ints between 0 and 4, inclusive:
+
+
>>> np.random.randint(5, size=(2, 4))
+array([[4, 0, 2, 1],
+ [3, 2, 2, 0]])
+
+
+
+
+
+random_integers (low[, high, size])
+
+
+返回随机的整数,位于闭区间 [low, high]。
+Notes
+To sample from N evenly spaced floating-point numbers between a and b, use:
+
+
a + (b - a) * (np.random.random_integers(N) - 1) / (N - 1.)
+
+Examples
+
+
>>> np.random.random_integers(5)
+4
+>>> type(np.random.random_integers(5))
+<type ‘int‘>
+>>> np.random.random_integers(5, size=(3.,2.))
+array([[5, 4],
+ [3, 3],
+ [4, 5]])
+
+Choose five random numbers from the set of five evenly-spaced numbers between 0 and 2.5, inclusive (i.e. , from the set ):
+
+
>>> 2.5 * (np.random.random_integers(5, size=(5,)) - 1) / 4.
+array([ 0.625, 1.25 , 0.625, 0.625, 2.5 ])
+
+Roll two six sided dice 1000 times and sum the results:
+
+
>>> d1 = np.random.random_integers(1, 6, 1000)
+>>> d2 = np.random.random_integers(1, 6, 1000)
+>>> dsums = d1 + d2
+
+Display results as a histogram:
+
+
>>> import matplotlib.pyplot as plt
+>>> count, bins, ignored = plt.hist(dsums, 11, normed=True)
+>>> plt.show()
+
+
+
+
+
+
+random_sample ([size])
+
+
+返回随机的浮点数,在半开区间 [0.0, 1.0)。
+To sample multiply the output of random_sample by (b-a) and add a :
+
+
(b - a) * random_sample() + a
+
+Examples
+
+
>>> np.random.random_sample()
+0.47108547995356098
+>>> type(np.random.random_sample())
+<type ‘float‘>
+>>> np.random.random_sample((5,))
+array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428])
+
+Three-by-two array of random numbers from [-5, 0):
+
+
>>> 5 * np.random.random_sample((3, 2)) - 5
+array([[-3.99149989, -0.52338984],
+ [-2.99091858, -0.79479508],
+ [-1.23204345, -1.75224494]])
+
+
+
+
+
+
+random ([size])
+
+
+返回随机的浮点数,在半开区间 [0.0, 1.0)。
+(官网例子与random_sample完全一样)
+
+
+
+
+ranf ([size])
+
+
+返回随机的浮点数,在半开区间 [0.0, 1.0)。
+(官网例子与random_sample完全一样)
+
+
+
+
+sample ([size])
+
+
+返回随机的浮点数,在半开区间 [0.0, 1.0)。
+(官网例子与random_sample完全一样)
+
+
+
+
+choice (a[, size, replace, p])
+
+
+生成一个随机样本,从一个给定的一维数组
+Examples
+Generate a uniform random sample from np.arange(5) of size 3:
+
+
>>> np.random.choice(5, 3)
+array([0, 3, 4])
+>>> #This is equivalent to np.random.randint(0,5,3)
+
+Generate a non-uniform random sample from np.arange(5) of size 3:
+
+
>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
+array([3, 3, 0])
+
+Generate a uniform random sample from np.arange(5) of size 3 without replacement:
+
+
>>> np.random.choice(5, 3, replace=False)
+array([3,1,0])
+>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
+
+Generate a non-uniform random sample from np.arange(5) of size 3 without replacement:
+
+
>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
+array([2, 3, 0])
+
+Any of the above can be repeated with an arbitrary array-like instead of just integers. For instance:
+
+
>>> aa_milne_arr = [‘pooh‘, ‘rabbit‘, ‘piglet‘, ‘Christopher‘]
+>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
+array([‘pooh‘, ‘pooh‘, ‘pooh‘, ‘Christopher‘, ‘piglet‘],
+ dtype=‘|S11‘)
+
+
+
+
+
+
+bytes (length)
+
+
+返回随机字节。
+
+
>>> np.random.bytes(10)
+‘ eh\x85\x022SZ\xbf\xa4‘ #random
+
+
+
+
+
+
+
+
+
排列
+
+
+
+
+shuffle (x)
+
+
+现场修改序列,改变自身内容。(类似洗牌,打乱顺序)
+
+
>>> arr = np.arange(10)
+>>> np.random.shuffle(arr)
+>>> arr
+[1 7 5 2 9 4 3 6 0 8]
+
+
+This function only shuffles the array along the first index of a multi-dimensional array:
+
+
>>> arr = np.arange(9).reshape((3, 3))
+>>> np.random.shuffle(arr)
+>>> arr
+array([[3, 4, 5],
+ [6, 7, 8],
+ [0, 1, 2]])
+
+
+
+
+
+
+permutation (x)
+
+
+返回一个随机排列
+
+
>>> np.random.permutation(10)
+array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])
+
+
+
>>> np.random.permutation([1, 4, 9, 12, 15])
+array([15, 1, 9, 4, 12])
+
+
+
>>> arr = np.arange(9).reshape((3, 3))
+>>> np.random.permutation(arr)
+array([[6, 7, 8],
+ [0, 1, 2],
+ [3, 4, 5]])
+
+
+
+
+
+
+
+
+
分布
+
+
+
+
+beta (a, b[, size])
+
+贝塔分布样本,在 [0, 1] 内。
+
+
+
+binomial (n, p[, size])
+
+二项分布的样本。
+
+
+
+chisquare (df[, size])
+
+卡方分布样本。
+
+
+
+dirichlet (alpha[, size])
+
+狄利克雷分布样本。
+
+
+
+exponential ([scale, size])
+
+指数分布
+
+
+
+f (dfnum, dfden[, size])
+
+F分布样本。
+
+
+
+gamma (shape[, scale, size])
+
+伽马分布
+
+
+
+geometric (p[, size])
+
+几何分布
+
+
+
+gumbel ([loc, scale, size])
+
+耿贝尔分布。
+
+
+
+hypergeometric (ngood, nbad, nsample[, size])
+
+超几何分布样本。
+
+
+
+laplace ([loc, scale, size])
+
+拉普拉斯或双指数分布样本
+
+
+
+logistic ([loc, scale, size])
+
+Logistic分布样本
+
+
+
+lognormal ([mean, sigma, size])
+
+对数正态分布
+
+
+
+logseries (p[, size])
+
+对数级数分布。
+
+
+
+multinomial (n, pvals[, size])
+
+多项分布
+
+
+
+multivariate_normal (mean, cov[, size])
+
+
+多元正态分布。
+
+
>>> mean = [0,0]
+>>> cov = [[1,0],[0,100]] # diagonal covariance, points lie on x or y-axis
+
+
+
>>> import matplotlib.pyplot as plt
+>>> x, y = np.random.multivariate_normal(mean, cov, 5000).T
+>>> plt.plot(x, y, ‘x‘); plt.axis(‘equal‘); plt.show()
+
+
+
+
+
+
+negative_binomial (n, p[, size])
+
+负二项分布
+
+
+
+noncentral_chisquare (df, nonc[, size])
+
+非中心卡方分布
+
+
+
+noncentral_f (dfnum, dfden, nonc[, size])
+
+非中心F分布
+
+
+
+normal ([loc, scale, size])
+
+
+正态(高斯)分布
+Notes
+The probability density for the Gaussian distribution is
+
+
+
+where is the mean and the standard deviation. The square of the standard deviation, , is called the variance.
+The function has its peak at the mean, and its “spread” increases with the standard deviation (the function reaches 0.607 times its maximum at and [R217] ).
+
+Examples
+Draw samples from the distribution:
+
+
>>> mu, sigma = 0, 0.1 # mean and standard deviation
+>>> s = np.random.normal(mu, sigma, 1000)
+
+Verify the mean and the variance:
+
+
>>> abs(mu - np.mean(s)) < 0.01
+True
+>>> abs(sigma - np.std(s, ddof=1)) < 0.01
+True
+
+Display the histogram of the samples, along with the probability density function:
+
+
>>> import matplotlib.pyplot as plt
+>>> count, bins, ignored = plt.hist(s, 30, normed=True)
+>>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *
+... np.exp( - (bins - mu)**2 / (2 * sigma**2) ),
+... linewidth=2, color=‘r‘)
+>>> plt.show()
+
+
+
+
+
+
+pareto (a[, size])
+
+帕累托(Lomax)分布
+
+
+
+poisson ([lam, size])
+
+泊松分布
+
+
+
+power (a[, size])
+
+Draws samples in [0, 1] from a power distribution with positive exponent a - 1.
+
+
+
+rayleigh ([scale, size])
+
+Rayleigh 分布
+
+
+
+standard_cauchy ([size])
+
+标准柯西分布
+
+
+
+standard_exponential ([size])
+
+标准的指数分布
+
+
+
+standard_gamma (shape[, size])
+
+标准伽马分布
+
+
+
+standard_normal ([size])
+
+标准正态分布 (mean=0, stdev=1).
+
+
+
+standard_t (df[, size])
+
+Standard Student’s t distribution with df degrees of freedom.
+
+
+
+triangular (left, mode, right[, size])
+
+三角形分布
+
+
+
+uniform ([low, high, size])
+
+均匀分布
+
+
+
+vonmises (mu, kappa[, size])
+
+von Mises分布
+
+
+
+wald (mean, scale[, size])
+
+瓦尔德(逆高斯)分布
+
+
+
+weibull (a[, size])
+
+Weibull 分布
+
+
+
+zipf (a[, size])
+
+齐普夫分布
+
+
+
+
+
随机数生成器
+
+
+
+
+RandomState
+
+Container for the Mersenne Twister pseudo-random number generator.
+
+
+
+seed ([seed])
+
+Seed the generator.
+
+
+
+get_state ()
+
+Return a tuple representing the internal state of the generator.
+
+
+
+set_state (state)
+
+Set the internal state of the generator from a tuple.
+
+
+
+
\ No newline at end of file
diff --git a/aa.jpg b/aa.jpg
new file mode 100644
index 00000000..576b31a5
Binary files /dev/null and b/aa.jpg differ
diff --git a/信息系统集成/第2章 智能系统中的弱电系统.md b/信息系统集成/第2章 智能系统中的弱电系统.md
deleted file mode 100644
index 7f25cda7..00000000
--- a/信息系统集成/第2章 智能系统中的弱电系统.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# 智能系统中的弱电系统
-
-## 弱电系统与物联网
-
-* 直流1.5V$\sim$ 36V
-*
-
-##
\ No newline at end of file
diff --git a/信息系统集成/第2章 综合布线图的工程技术.md b/信息系统集成/第2章 综合布线图的工程技术.md
deleted file mode 100644
index 27677425..00000000
--- a/信息系统集成/第2章 综合布线图的工程技术.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# 综合布线图的工程技术
-
-##
\ No newline at end of file
diff --git a/信息系统集成/课程概要.md b/信息系统集成/课程概要.md
deleted file mode 100644
index 5ab8fed1..00000000
--- a/信息系统集成/课程概要.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# 课程概要
-
-## 课程安排
-
-## 考核标准
-
-### 1+4+1(1个投名状4个单元作业1考试)
-
-
-* 投名状作业:提交一份设计图及项目说明。投名状啥的。路线图、结构图。
-* 每个单元一个可选的作业:设计布线图,户型图+智慧家居的布线图+或者+综述性作业
- * 每个单元包含一个设计作业。共4个设计作业,选三个完成设计作业。
- * 选一个单元,综合成一篇论文。
-
-* 作业提交eai2019@126.com
-
-## 主要内容
-
- 1. 物联网
- 2. 网络
- 3. 分析设计
- 4. 大数据后端
diff --git a/工作日志/2020年9月10日.md b/工作日志/2020年9月10日.md
deleted file mode 100644
index 32c6af8b..00000000
--- a/工作日志/2020年9月10日.md
+++ /dev/null
@@ -1 +0,0 @@
-##
\ No newline at end of file
diff --git a/工作日志/2020年9月14日.md b/工作日志/2020年9月14日.md
index 78472100..4e8385e4 100644
--- a/工作日志/2020年9月14日.md
+++ b/工作日志/2020年9月14日.md
@@ -1,4 +1,3 @@
-今天要做的事情:
# 主机配置-服务器搭建
## 需要了解的事情
diff --git a/工作日志/2020年9月28日.md b/工作日志/2020年9月28日.md
new file mode 100644
index 00000000..caf04c51
--- /dev/null
+++ b/工作日志/2020年9月28日.md
@@ -0,0 +1,24 @@
+# 学习安排
+## 具体的学习计划
+
+* 每天早上:一周的课程python实现
+* 每天下午:一周的课程python实现
+* 每天晚上:阅读论文并总结。
+
+
+
+## 方法
+1. 涉及到基础知识进行补充,例如线性代数
+2. 涉及到的编程知识进行补充,例如Numpy、scikitlearn、scipy等。
+
+
+也就是说,现在要同时学习三个东西。机器学习,机器学习依赖的数学基础,机器学习实现的编程基础。降低速度,尽量在一个月内,实现初步认知。
+## 补充
+应该对matplotlib和scipy的教程进行补充。教程部分只完成简单的说明即可。所有的例子,手动运行敲一遍。教程该出简单的实例,然后手动实现实例。
+
+具体的内容,等到实践过程中进行学习。
+
+
+
+
+
diff --git a/工作日志/2020年9月29日.md b/工作日志/2020年9月29日.md
new file mode 100644
index 00000000..d8fc65ef
--- /dev/null
+++ b/工作日志/2020年9月29日.md
@@ -0,0 +1,16 @@
+# 组会的PPT结构
+
+## 情报利用的现状
+
+## 联邦学习的现状
+
+## 机器学习在情报利用领域可能的应用路径
+
+## 拟打算应用的机器学习算法
+
+## 面临的难题
+
+## 解决问题的具体规划
+
+## 最近做的界面的事情
+
diff --git a/工作日志/2020年9月30日.md b/工作日志/2020年9月30日.md
new file mode 100644
index 00000000..ac048d4e
--- /dev/null
+++ b/工作日志/2020年9月30日.md
@@ -0,0 +1 @@
+# 看论文工具与方法
\ No newline at end of file
diff --git a/工作日志/2020年9月3日.md b/工作日志/2020年9月3日.md
index 4a1a3d79..b02bdb6d 100644
--- a/工作日志/2020年9月3日.md
+++ b/工作日志/2020年9月3日.md
@@ -1,3 +1,4 @@
+# 情报威胁与联邦学习
## 研究方向
* 情报威胁----定义系统的应用场景,包括输入输出。
diff --git a/工作日志/2020年9月4日.md b/工作日志/2020年9月4日.md
index 169358e7..8ada0b6f 100644
--- a/工作日志/2020年9月4日.md
+++ b/工作日志/2020年9月4日.md
@@ -1,3 +1,4 @@
+# 供应链金融
## 时间安排
上午:完成供应链金融的调查报告
diff --git a/工作日志/2020年9月6日.md b/工作日志/2020年9月6日.md
index 0ca6756d..38167e10 100644
--- a/工作日志/2020年9月6日.md
+++ b/工作日志/2020年9月6日.md
@@ -1,12 +1,20 @@
-当前的主要任务:
+# 机器学习
+## 当前的主要任务:
现在处在研究的第一和第二阶段。关于第一阶段联邦学习的应用场景,主要由蒋师兄完成。第二阶段,学习联邦学习关联的基础知识,为第三阶段机器学习算法的实现和框架的搭建做好准备。
看完相关的文章和博客。然后开始学习,用两周时间学习完成基础知识。在学习基础知识的时候,使用tensorflow框架进行算法的运行。
+-------------------
+## 长久的时间计划:
+* 必须在十一月份之前完成学习工作。那就到10月30号把。还有五本需要看的书。10月30号之前,完全搞懂该领域的内容。
+* 十一月份,进行调研,寻找大量相关的研究工作。
+* 十二月份,对相关领域的算法进行实现。对算法进行改进。
+
+> 感觉时间不够了啊,兄弟。你这需要做的事情有点多。国庆节,尽量恶补完成大部分机器学习的基础知识和主要的算法,然后国庆节后开始看论文。
--------------
-学习路线
+## 学习路线
### Python系列(一周)
diff --git a/工作日志/2020年9月9日.md b/工作日志/2020年9月9日.md
index 51dbcf0c..70162b69 100644
--- a/工作日志/2020年9月9日.md
+++ b/工作日志/2020年9月9日.md
@@ -45,7 +45,7 @@ easy-window小程序。
### 工程部署,使用nodejs封装工具发布。
* 使用electron-package对工程进行打包√
-* 使用electron-build或者electron-asar对工程进行发布。创建安装程序。
+* 使用electron-build或者electron-asar对工程进行发布。创建安装程序。√
## 3 解决的bug问题
diff --git a/工作日志/总结.md b/工作日志/总结.md
new file mode 100644
index 00000000..33351ef7
--- /dev/null
+++ b/工作日志/总结.md
@@ -0,0 +1,21 @@
+## 第一周(9.1-9.6)
+* 阅读漏洞利用的相关知识,证明了漏洞利用的不可行。
+* 更换了开题的方向,转向联邦学习
+
+## 第二周(9.7-9.13)
+
+* 对联邦学习进行了一周的调研,了解了联邦学习是什么。
+* 对情报利用的方式进行了讨论,对情报可能的利用方向进行了总结。
+* 与公司进行对话,了解了情报利用利于相关的内容。
+
+
+## 第三周(9.14-9.20)
+* 完成了界面设计的一套方案。nodejs-electron-html/js/css-Cmake(make),打通了界面设计的技术路径。
+
+## 第四周(9.21-9.27)
+* 机器学习任务的开始。明确了机器学习的学习路径。
+* 完成了python3-numpy-scipy-matplotlib-pandas机器学习系列工具的学习。需要通过具体的编程项目进行熟练。
+
+## 第五周(9.28-10.4)
+* 吴恩达课程完成。
+* 机器学习相关工具的熟练。
\ No newline at end of file
diff --git a/机器学习/PPT/Lecture1.pdf b/机器学习/PPT/Lecture1.pdf
new file mode 100644
index 00000000..0d2f96eb
Binary files /dev/null and b/机器学习/PPT/Lecture1.pdf differ
diff --git a/机器学习/PPT/Lecture10.pdf b/机器学习/PPT/Lecture10.pdf
new file mode 100644
index 00000000..5dcd8a63
Binary files /dev/null and b/机器学习/PPT/Lecture10.pdf differ
diff --git a/机器学习/PPT/Lecture11.pdf b/机器学习/PPT/Lecture11.pdf
new file mode 100644
index 00000000..68fef894
Binary files /dev/null and b/机器学习/PPT/Lecture11.pdf differ
diff --git a/机器学习/PPT/Lecture12.pdf b/机器学习/PPT/Lecture12.pdf
new file mode 100644
index 00000000..fb218987
Binary files /dev/null and b/机器学习/PPT/Lecture12.pdf differ
diff --git a/机器学习/PPT/Lecture13.pdf b/机器学习/PPT/Lecture13.pdf
new file mode 100644
index 00000000..16e5aa86
Binary files /dev/null and b/机器学习/PPT/Lecture13.pdf differ
diff --git a/机器学习/PPT/Lecture14.pdf b/机器学习/PPT/Lecture14.pdf
new file mode 100644
index 00000000..eb69f47e
Binary files /dev/null and b/机器学习/PPT/Lecture14.pdf differ
diff --git a/机器学习/PPT/Lecture15.pdf b/机器学习/PPT/Lecture15.pdf
new file mode 100644
index 00000000..3871e0ce
Binary files /dev/null and b/机器学习/PPT/Lecture15.pdf differ
diff --git a/机器学习/PPT/Lecture16.pdf b/机器学习/PPT/Lecture16.pdf
new file mode 100644
index 00000000..cea150ba
Binary files /dev/null and b/机器学习/PPT/Lecture16.pdf differ
diff --git a/机器学习/PPT/Lecture17.pdf b/机器学习/PPT/Lecture17.pdf
new file mode 100644
index 00000000..105ad572
Binary files /dev/null and b/机器学习/PPT/Lecture17.pdf differ
diff --git a/机器学习/PPT/Lecture18.pdf b/机器学习/PPT/Lecture18.pdf
new file mode 100644
index 00000000..65eb8410
Binary files /dev/null and b/机器学习/PPT/Lecture18.pdf differ
diff --git a/机器学习/PPT/Lecture2.pdf b/机器学习/PPT/Lecture2.pdf
new file mode 100644
index 00000000..720c3a95
Binary files /dev/null and b/机器学习/PPT/Lecture2.pdf differ
diff --git a/机器学习/PPT/Lecture3.pdf b/机器学习/PPT/Lecture3.pdf
new file mode 100644
index 00000000..d4bd4f07
Binary files /dev/null and b/机器学习/PPT/Lecture3.pdf differ
diff --git a/机器学习/PPT/Lecture4.pdf b/机器学习/PPT/Lecture4.pdf
new file mode 100644
index 00000000..9b763d67
Binary files /dev/null and b/机器学习/PPT/Lecture4.pdf differ
diff --git a/机器学习/PPT/Lecture5.pdf b/机器学习/PPT/Lecture5.pdf
new file mode 100644
index 00000000..995b7099
Binary files /dev/null and b/机器学习/PPT/Lecture5.pdf differ
diff --git a/机器学习/PPT/Lecture6.pdf b/机器学习/PPT/Lecture6.pdf
new file mode 100644
index 00000000..aba6d804
Binary files /dev/null and b/机器学习/PPT/Lecture6.pdf differ
diff --git a/机器学习/PPT/Lecture7.pdf b/机器学习/PPT/Lecture7.pdf
new file mode 100644
index 00000000..2a3d04a5
Binary files /dev/null and b/机器学习/PPT/Lecture7.pdf differ
diff --git a/机器学习/PPT/Lecture8.pdf b/机器学习/PPT/Lecture8.pdf
new file mode 100644
index 00000000..44e16f30
Binary files /dev/null and b/机器学习/PPT/Lecture8.pdf differ
diff --git a/机器学习/PPT/Lecture9.pdf b/机器学习/PPT/Lecture9.pdf
new file mode 100644
index 00000000..ab810c0a
Binary files /dev/null and b/机器学习/PPT/Lecture9.pdf differ
diff --git a/机器学习/img/gradient.png b/机器学习/img/gradient.png
new file mode 100644
index 00000000..2b1f00d5
Binary files /dev/null and b/机器学习/img/gradient.png differ
diff --git a/机器学习/机器学习实战/01matplot3D图像.py b/机器学习/机器学习实战/01matplot3D图像.py
new file mode 100644
index 00000000..da3741dc
--- /dev/null
+++ b/机器学习/机器学习实战/01matplot3D图像.py
@@ -0,0 +1,21 @@
+# 使用numpy实现线性回归
+import numpy as np
+import matplotlib.pyplot as plt
+
+
+# 尝试使用matplot画了一个三维图像。
+x_1 = np.arange(0,10,0.1)
+x_1 = np.expand_dims(x_1,0)
+x_1 = np.repeat(x_1,100,axis=0)
+x_2= np.arange(0,10,0.1)
+x_2 = np.expand_dims(x_2,1)
+x_2 = np.repeat(x_2,100,axis=1)
+
+y = ((x_1+x_2-10)**2)
+
+print(x_1.flatten())
+ax = plt.axes(projection='3d')
+
+ax.scatter3D(x_1.flatten(),x_2.flatten(),y.flatten(),c=y, cmap='Greens')
+
+plt.show()
diff --git a/机器学习/机器学习实战/02线性回归尝试.py b/机器学习/机器学习实战/02线性回归尝试.py
new file mode 100644
index 00000000..b33803eb
--- /dev/null
+++ b/机器学习/机器学习实战/02线性回归尝试.py
@@ -0,0 +1,26 @@
+# 吴恩达线性回归第一部分
+# 这是第一个线性回归(机器学习算法)用来预测房价,感觉有点神奇。
+import numpy as np
+
+# 构造了样本数据集
+x = np.arange(0,100,1)
+loss = np.random.rand(100)-0.5
+y = 2*x+6+loss
+
+# 对样本数据集进行线性回归y=a0+a1x
+# 给出参数的初始值
+a0 = -10
+a1 = -10
+w = 0.0001 # 表示梯度下降速度
+
+# 对a0进行梯度下降
+
+for i in range(1000):
+ a0 = a0-100*w*(1/100)*np.sum(a0+a1*x-y)
+ a1 = a1-w*(1/100)*np.sum((a0+a1*x-y)*x)
+
+print(a0,a1)
+
+
+
+
diff --git a/机器学习/机器学习课程/first.py b/机器学习/机器学习课程/first.py
deleted file mode 100644
index 864d9bfe..00000000
--- a/机器学习/机器学习课程/first.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# 用来实现吴恩达的机器学习课程
-
-
diff --git a/机器学习/机器学习课程/机器学习基础.md b/机器学习/机器学习课程笔记/机器学习基础.md
similarity index 98%
rename from 机器学习/机器学习课程/机器学习基础.md
rename to 机器学习/机器学习课程笔记/机器学习基础.md
index 331a8734..e048f208 100644
--- a/机器学习/机器学习课程/机器学习基础.md
+++ b/机器学习/机器学习课程笔记/机器学习基础.md
@@ -1,3 +1,4 @@
+## 机器学习分类
* 有监督的学习:给出了正确答案
* 回归问题:预测连续的数值输出。(输出是连续的,一条曲线)
* 分类问题:预测离散的值输出。(输出局限于几个类别,有界离散的输出)
@@ -7,14 +8,6 @@
* 聚类问题:将相同主体的新闻聚集到一块。社交网络划分为不同的圈子。结果不是事先给出的,通过机器学习,发现数据的内部结构。
-
-
-
-
-
-
-
-
## 典型问题
* 房屋面积-房屋价格:回归问题
diff --git a/机器学习/机器学习课程笔记/线性回归.md b/机器学习/机器学习课程笔记/线性回归.md
new file mode 100644
index 00000000..b9af37bd
--- /dev/null
+++ b/机器学习/机器学习课程笔记/线性回归.md
@@ -0,0 +1,50 @@
+# 线性回归
+
+## 房价问题
+* 数据集构成
+ * 训练集
+ * 样本数量m
+ * 样本特征$x_i$
+ * 目标变量y
+
+
+
+## 假设函数
+ * 假设函数
+ $$h(x)=\theta_0+\theta_1 x$$
+ * 模型参数$\theta_0,\theta_1$
+## 代价函数
+ * 损失函数、代价函数(loss/cost function):平方误差代价函数
+
+$$
+J(\theta_0,\theta_1)=\frac{1}{2m}\sum_1^m(h(x_i)-y_i)^2
+$$
+ * 目标函数:
+$$
+minimize_{\theta_0,\theta_1} J(\theta_0,\theta_1)
+$$
+
+## 梯度下降
+
+* 目标
+
+$$
+min_{\theta_1,\theta_2,\dots}J(\theta_1,\theta_2,\dots)
+$$
+* 给定$\theta$的初始值。不断修改$\theta$的值,使代价函数最小。统计学上使用全局的最小二乘法实现参数估计,计算机科学上使用局部迭代的梯度下降算法实现参数估计。
+* 梯度下降算法的公式
+
+$$
+\theta_j = \theta_j - \alpha\frac{\partial}{\partial \theta_j}J(\theta_1,\theta_2,\dots)
+$$
+* 吴恩达给出了梯度下降函数的解释,当导数为正时,表示函数递增,此时自变量减去一个正值,自变量减小,函数值下降。当导数为负时,表示函数递减,此时自变量减去一个负值,自变量增加,函数值增加。
+
+## batch梯度下降
+
+* 每一步都遍历了样本中所有的数据。
+
+## 梯度下降算法与最小二乘法区别
+
+* 给出假设函数(这是拟合的函数)
+* 使用最小二乘算法进行参数估计。这个是统计学的方法,利用样本的统计学特征,一次性全局计算准确的最小损失函数。
+* 使用梯度下降算法,进行参数估计。这是一个迭代的方法,利用每一条数据,更新参数。
\ No newline at end of file
diff --git a/程序设计语言原理/image/chomsky文法的关系.png b/程序设计语言原理/image/chomsky文法的关系.png
deleted file mode 100644
index 2df35d01..00000000
Binary files a/程序设计语言原理/image/chomsky文法的关系.png and /dev/null differ
diff --git a/程序设计语言原理/image/发展历史.png b/程序设计语言原理/image/发展历史.png
deleted file mode 100644
index 80628aca..00000000
Binary files a/程序设计语言原理/image/发展历史.png and /dev/null differ
diff --git a/程序设计语言原理/image/词法分析.png b/程序设计语言原理/image/词法分析.png
deleted file mode 100644
index d3a21c26..00000000
Binary files a/程序设计语言原理/image/词法分析.png and /dev/null differ
diff --git a/程序设计语言原理/image/语法分析图.png b/程序设计语言原理/image/语法分析图.png
deleted file mode 100644
index 00947c81..00000000
Binary files a/程序设计语言原理/image/语法分析图.png and /dev/null differ
diff --git a/程序设计语言原理/第0章 概论.md b/程序设计语言原理/第0章 概论.md
deleted file mode 100644
index 08e55d02..00000000
--- a/程序设计语言原理/第0章 概论.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# 绪论
-
-## 1 语言
-
-### 语言的一般特性
-* 媒体性
-* 规范性
-* 演进性
-* 抽象性
-* 冗余多义性
-
-### 程序设计语言的特性
-
-* 程序设计语言是人工语言
-* 主要通信对象是机器
-* 用于表达软件
-
-### 程序设计语言的作用(为什么研究)
-
-* 计算机软硬件技术的窗口
-* 人们研究计算表达的形势
-* 它和计算机理论研究联系最为密切
-* 研究有利于与提高软件开发人员的素质
-* 有利于开发专用用语言或界面语言
-* 有利于新领域语言的发展
-* 有利于通用语言的标准化规范化
-
-## 2 程序设计语言的定义与处理器
-> 一个程序设计语言的实际存在是《语言规格说明书》。一个程序设计语言的实际存在是改语言程序的处理器。
-### 解释器
-解释器读入一段相对完整源代码(多数情况下是一句)翻译为目标代码后,立即解释执行。
-
-### 编译器
-
-编译器读入一个独立的编译单元(程序的逻辑单元,如主程序 、函数,子程序。或若干个逻辑单元组成的编译单元,如文件、模块、包) 翻译为可执行的目标代码单元,经过连接必要的库支持例程成为可执行内存映象,加载到内存中运行,由于是按单元翻译,可以经过上下文分析作若干次优化,目标代码质量高。
-
-### 元语言(metalanguage)
-
-表达每一个语法特征
-* 字符集、词条表由它们提供标识符、运算符、关键字、空格、限制符、各种数字量、字符串常量等语法概念。
-* 注释 注释符号之内(或以后)的符号串是为人们阅读,处理器要略去的。
-* 语法结构定义,定义以上符号组合的合法结构。它给出语句、表达式、程序单元、块(如FORTRAN的循环域)、作用域、嵌套与结合等语法概念。
diff --git a/程序设计语言原理/第10章 代数语义学.md b/程序设计语言原理/第10章 代数语义学.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/程序设计语言原理/第1章 历史.md b/程序设计语言原理/第1章 历史.md
deleted file mode 100644
index 55bde9f6..00000000
--- a/程序设计语言原理/第1章 历史.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# 发展与分类
-
-## 1 历史
-
-
-### 程序设计语言简史
-* 1945 ENIAC 真空管计算机
-* 1946 冯诺依曼机构UNIVAC-1计算机
-* 50年代 FORTRAN ALGOL COBOL
-* 60年代 APL SNOBOL LOGO PASCAL
-* 70年代 C LISP Perlog Edison
-* 80年代 面向对象Smalltalk C++ SQL
-
-## 2 分类
-
-### 对机器依赖程度
-
-* 低级语言:机器语言和汇编语言
-* 中级语言:编程操纵机器硬件,不涉及地址码和操作码。
-* 高级语言:独立于机器
-
-### 应用领域
-* 商用语言
-* 科学计算
-* 系统程序设计
-* 模拟预演
-* 正文处理
-* 实时处理
-* 嵌入式应用
-* 人工智能应用
-* 查询和命令语言
-* 教学语言
-* 打印专用
-* 专用与某种数据结构
-```
-/*
-引入外部文件进行构建
-能够定义文本的名字,实现文本与排版的分离
-能够进行文本与文本的嵌套,支持嵌套处理
-能够使用反斜杠转义特殊符号
-支持链式处理
-全局默认控制对象env
-定义新的处理函数默认一个文本输入对象,默认一个文本输出对象。前边的函数可以覆盖处理前边的函数。内部函数的优先级更高。
-能够定义函数所处的模块。
-自顶向下的设计过程。从全局到局部。所以后边可以覆盖前边,细节覆盖总体布局。
-链式处理,是对原来文本的处理,不是生成新的文本
-定义引用,引用编号,自动引用
-*/
-import another_name.pp
-import another_progrom.pp
-
-//paper 模块的leftboder函数
-env.paper.leftborder(29)
-
-textname={i am a good man}
-textname.fix(delete)
-text1,text2,text3.fix()
-pic1,pic2.middle()
-
-{zhesh 'pic.hello()' iwe\alpha nben}.hello(middle,big).world(45size).print()
-
-def newp(hello,txt):
- this is content
-enddef
-```
-### 实现计算方式
-* 编译型语言
-* 解释型语言
-
-### 使用方式
-* 交互式语言
-* 非交互式语言
-
-### 程序设计范型
-单范型语言:程序组织和实现计算的模式
-* 命令式语言
-* 面向对象语言
-* 数据流语言
-* 函数式语言
-* 逻辑式语言
-* 并发程序设计语言
-
-多范型语言:
-包含多种范型的程序设计语言。
-
-
-
-
-### 断代
-
-* 第一代:机器语言
-* 第二代:汇编语言
-* 第三代:高级语言
-* 第四代:非过程语言
-* 第五代:自然语言(人工智能)
-
-## 3 形式语言与图灵机
-
-### 形式语言特点
-
-* 符号集
-* 转换规则
-
-### 图灵机五元组
-$$(q_i,S_j,S_k,(R,L,N),q_j)$$
-机器当前状态读入$S_j$后写入$S_k$,进行操作$R/L/N$,转换为装填$q_j$。
-
-### 指令系统
-
-* CISC(reduced instruction set computer)。指令复杂,执行较慢。不利于大规模集成电路设计。
-* RISC(complex instruction set computer)。简化了指令系统,适合大规模集成电路设计。执行速度快。提供高级程序设计语言支持,简化了编程设计过程。
-
-## 4 发展过程
-
-* 汇编语言。与机器指令一一对应。
-* 虚拟机,在计算机机器语言之上,虚拟各种不同语言的计算机环境。
-* 语言要求:Go、Python、Scala。
diff --git a/程序设计语言原理/第2章 程序设计语言设计概述.md b/程序设计语言原理/第2章 程序设计语言设计概述.md
deleted file mode 100644
index a8530fed..00000000
--- a/程序设计语言原理/第2章 程序设计语言设计概述.md
+++ /dev/null
@@ -1,274 +0,0 @@
-# 设计概述
-
-## 1 表示与抽象
-### 表达与抽象的概念
-* 表示是对事物抽象的表达。
-* 抽象是对论题本质的提取。
-* 同一个事物在不同抽象层次上的表示。自然语言描述、高级语言表示、汇编语言表示、机器语言表示。
-* 上层抽象可以用多种下层抽象的实现。
-### 不同抽象层次
-* 客观世界自然语言描述
-* 数学模型数学语言描述
-* 程序设计程序语言描述
-* 机器指令机器语言描述
-
-
-### 显示表示和隐式表示
-* 显示表示float n=3.14指明n的类型。
-* 隐式表示 n=3.14缺省为浮点类型。
-
-### 聚合表示和分散表示。
-* 分散表示。整型,浮点型等数据之间的+运算使用不同的运算符。
-* 聚合表示。所有类型的+运算都可以使用+运算符实现。或者同一个函数实现。
-
-## 2 设计目标
-
-### 具体目标
-定义一组能表示某种范型的特征集,每个特征有严格定义并可在机器上高效实现,程序员可灵活运用这些特征表达它所希望的任何计算。
-
-### 评价标准
-* 模型有力 Model Power
-* 语义清晰 Semantic Clarity
-* 移植性好 Portability
-* 可读性好 Readability
-* 程序质量 Quality
-* 安全性
-* 并发
-* 方便 Convenience
-* 简单 Simplicity
-* 高效 Efficiency
-* 灵活性 Flexibility
-* 可扩充性 Extensible
-* 可重用性 Reusable
-
-
-## 3 设计准则
-
-### 具体准则
-* 频度准则:越常用越简单
-* 结构一致:程序结构和计算的逻辑结构一致,可读、方便
-* 局部性 Locality:
- - 只有全局变量 Basic
- - 不鼓励全局变量 Pascal, C
- - 无全局变量函数式 Java
-* 词法内聚 Lexical Coherence : 变量在使用处就近声明(Pascal 声明和语句严格分开)
-* 语法一致性
-* 安全性Security
-* 正交性和正规性
-* 数据隐藏。封装,以名字封装内部数据设计者可见使用者不可见
-* 抽象表达
-
-
-## 4 规格说明
-
-### 概述
-
-规格说明用来定义一个语言文本的语法和语义。用于表达程序设计语言的的语言成为元语言。
-* 形式语法:以形式结构规则的语言元素组合规则。
-* 微语法:词法Lexicon
-* 宏语法:定义特征规则
-
-### 字符集
-* 允许出现在语言的程序里出现的字符的全体
-
-
-### 词法分析
-
-由程序的字符序列得到词法元素序列的过程就是词法分析。编译器处理表示源程序的字符序列,根据词法规则做词法分析,将 源程序切分为符合词法的段,识别出源程序的有意义单词(token) 。词法分析得到一个(表达被分析的源程序的)单词流,流中各单词 标明了词法类别。词法分析中抛弃所有无保留价值的分隔符(如空白符)和噪声词。
-
-词法分析通常采用最长可能原则,确定可能成为单词的最长字符串。
-
-词法分类主要包括以下内容
-* 标识符:文字形式的词法对象,用于表示程序对象的名字。
-* 关键字:语言规定了特殊意义的标识符
-* 运算符:有预定义意义的特殊字符或特殊字符序列
-* 分隔符:用于分隔程序里的不同词法元素的特殊符号或标识符。空格,换行和制表符等,通常作为语法元素的分隔符。
-
-### 语法分析
-
-* 语法分析定义
-
-语法规定位于词法层次之上的程序结构。
-
-语法用于确定一个输入序列是否合法的程序。程序存在多个不同层次的合法性问题:
-– 局部结构 例:C程序里的if 之后是不是左括号,括号是否配对
-– 上下文关系 例:变量使用前是否有定义,使用是否符合类型的要求
-– 深层问题 例:使用变量的值之前,变量是否已经初始化
-
-* 语法分析图
-
-
-
-其中方框为非终结符,圆和椭圆形为终结符。箭头指向构造流向。每个非终结符又可开始一个语法图(一条产生式规则) 。与EBNF完全对应,[ ]以'短路'绕道表示,{ }以迥环表示,小圆弧是有意义的,表示流向。有的语法图在环线上注上数字表示最多转几次。
-
-* 语法分析分类
- * “自顶向下” 释义则从文法的起始符开始,按可能产生的表达式寻 找语句相同的结构匹配。每一步都产生下一个可能的源符号串,找到再 往下走。
- * “由底向上”释义则相反,它先查找源代码的各个符号串,看它能 否匹配归结为产生式左边的非终结符,如果有含混则向前多读入k个符 号串,为此归约下去,一个短语一个短语,最后到达起始符号串,归约 的过程就形成了释义树。
-
-
-### 语义分析
-> 在最后再详细补充
-
-程序通常要在计算机上执行,因此按照程序的运行步骤或操作来说明程序设计语言是很自然的,这就是所谓的操作语义学。大多数程序设计语言的非形式化语义都是用这种方式说明的。例如 Pascal中while命令的操作语义可说明如下:
-```
-执行命令while E do C,其步骤为:
- (1) 对表达式E求值,产生一个真假值。
- (2) 如果值为true,则执行命令C,然后从(1)开始重复。
- (3) 如果值为false,终止。
-```
-
-
-* 指称语义。为每个程序短语指派一数学实体(指称)为其意义。典型情况是将其输入映射为输出的函数。例如,一个表达式的指称是将环境和存储映射为值的函数。一个命令的指称是将环境、初始存储映射为最终存储的函数。
-```
- execute 〖while E do C〗 =
- let execute-while env sto =
- let truth-value tr=evaluate〖E〗 env sto in
- if tr
- then execute-while env (execute 〖C〗 env sto)
- else sto
- in
- execute-while
-```
-* 公理语义。它只定义证明规则(公理及推理规则),以此证明程序的某些性质。这些证明规则在某种意义上就是抽象的语义。公理语义主要用于程序验证,语言理解,语言规范/标准化等方面,对编译 、解释器的 没有直接的作用。把语言的公理描述看作是该语言的一个理论,该理论由三部分组成:
- * 公理集 元语言描述的不加证明的公理集如:|- 0 succ 0 即自然数0的后继大于0是一个定理(由|-表示)也是一条公理。
- * 语法规划集 以它来确定什么是合式公式。
- * 推理规则集 从已确立的定理演绎新定理。
-
-* 代数语义。代数语义把语义模型的集合看成是一个代数结构,模型簇 对应为代数系统。
-
-
-## 5 上下文无关文法
-
-### 文法(Grammar)
-文法可导出该语言所有可能的句子,形式地,一个文法G是一个四元组:
-$$
-G=(S,N,T,P)
-$$
-* 其中,T是终结符号串的有限集。
-* N是非终结符号串的有限集,是文法中提供的成分概念,相当于英语动词短语、名词短语或定语从句等句子成分的符号表示。
-* T∩N = Φ,即它们是不相交的。
-* S是起始符号串,S∈N。
-* P是产生式,一般形式是:α→β α,β∈(T∪N)*。“→”表示左端可推导出右端,如α→β,α→Υ,α→δ则可写为: α→β|Υ|δ
-
-
-如果产生式将语言的非终结符中的每一个标记都推得为终结符号,则这一组产生式集即为该语言的全部文法。
-
-### 文法的递归表示
-
-文法的递归表示在形式文法中是必须的。例2-1 整数的产生式表示法:
-```
-→0|1|2|3|4|5|6|7|8|9
-→ 一位数字是整数
-→ 两位数字也是整数
-→… n位数字也是整数
-可以写成:
-→||
-```
-> α→αβ是左递归产生式,而α→βα是右递归产生式,也叫尾递归的。不同型式的产生式决定了不同型式的文法。
-
-### Chomsky文法
-> 希腊字母是终结符。大写字母是非终结符。
-
-* **0型文法**如果对产生式α→β左端和右端不加任何限制:
-```
-α∈(N∪T) ,β∈(N∪T)*
-```
-这种文法对应的语言是递归可枚举语言。在编译理论中,图灵机(或双向下推机)可以识别这种语言。
-
-* **1型文法**如果产生式形如:
-```
-αAβ→αBβ α,β∈(N∪T)*, A∈N, B∈(N∪T)
-```
-则叫做上下文相关文法,对应的语言是上下文敏感语言。线性有界自动机可识别这种语言。(因为左端含有非终结符,每一个推导式与左右两边的非终结符有关,所以是上下文有关文法)
-
-* **2型文法**如果产生式形如:
-```
-A→α α∈ (N∪T)*, A∈N
-```
-左端不含终结符且只有一个非终结符。这种文法叫上下文无关文法。对应的语言即上下文无关语言。非确定下推机能识别这种语言。
-
-* 3型文法 如果产生式形如:
-```
-A→ αB|Bα α∈T*, A,B ∈N
-```
-左端不含终结符且只有一个非终结符。右端最多也只有一个非终结符且不在最左就在最右端。这种文法叫做正则文法,对应为正则语言。有限自动机可识别这种语言。显然,这种文法经置换可消除右端非终结符,使每一产生式均可用一终结符的正则表达式表达。
-例2-2 所有产生式的非终结符均可置换为终结符表达式。
-```
-设产生式是:
-N={S,R, Q}, T={a,b,c}
-P={S→Ra, S→Q, R→Qb, Q→c}
-则有:
-S→Ra→Qba→cba|S→Q→c
-R→Qb→cb
-Q→c
-```
-
-
-### BNF和EBNF
-
-BNF就是上下文无关文法的表示法。
-
-* ::= '定义为',即产生式中的“→”符号。
-* < > 表示所括符号串是非终结符号串。
-* | '或者'表示左右两边符号串序列是可替换的。终结符、关键字、标点符号直接写在产生式中。
-
-BNF示例
-```
- ::=
- |
- ::= +
- |-
- |
- ::=
- | < digit>
- |
-```
-
-增加更多内容
-
-* "[ ]"表示括号内的内容是可选的。
-* "{ }"表示括号内的内容可重复0至多次。
-* "*"是指可以重复多次。
-* "+"是指可以出现多次
-* "?"意思是操作符左边的符号(或括号中的一组符号)是可选项(可以出现0到多次)。
-```
- ::= [ +|-]
- ::= { | }
- ::=
- ::= { | < letter>}*
-```
-
-EBNF将BNF与正则表达式结合起来
-
-* 其元语符号变动是: 增加[ ]、{ } 、( )(表示成组)、.(表示产生式终结)。[ ] 、{ } 意义同前,旨在消除或减少递归表达。
-* 取消非终结符的尖括号,至少是产生式左端,为此符号串中空白用'_'连接。
-* 为区别元符号和程序符号(程序中也有[ ]、 、()、.),程序中的终结符加引号,如'(', ')', '.'。
-
-```
-program ::= ';' '.'.
-program_heading ::= 'program' [ '(' ')'].
-program_parameters ::= .
-identifier_list ::= {',' } .
-program_block ::= .
-block ::=
-
- .
-variable_declaration_part ::= ['var' ';'
- { ';' }].
-variable_declaration ::= ';' .
-statement_part ::= compound_statement.
-compound_statement ::= 'begin' 'end'.
-statement_sequence ::= {';' }.
-statement::=[ ':'](|).
-simple_statement ::= | |
- | < goto_statement>.
-structured_statement ::= |
- | | .
-
-```
-
-
-
-
-
-
diff --git a/程序设计语言原理/第3章 过程式程序设计语言.md b/程序设计语言原理/第3章 过程式程序设计语言.md
deleted file mode 100644
index 45e75200..00000000
--- a/程序设计语言原理/第3章 过程式程序设计语言.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# 过程式程序设计语言
-
-## 1 值与类型
-
-### 值与类型
-
-* 值是对事物性态的表征和度量,而表征和度量总是在某个论域的某个抽象层次上,讨论问题的抽象层次不同取值也不同。
-* 对值进行分类。每一个值都属于一个类型。
-* 主要包括以下类型:
- * 基本类型:整型实型浮点类型字符型真值型枚举型
- * 以简单的基本类型可以构造结构类型:元组、数组、记录、结构、表
- * 还可进一步组合成更复杂的复合类型:串、其他专用或更复杂的类型。
-
-### 字面量、变量常量
-
-* 字面量也称直接量,约定它的表示(名)就是它的值,且从它的表示可以得知其类型, 如123,1.23e10,'s',"stock",TRUE,dec,
-* 变量是代表任何值的标识符。一旦声明该标识符是什么类型,它在程序中只可取得该类型的某个值。变量只是一个数据的名字,它的值随时可变。
-* 常量也可以是标识符。一旦某标识符声明为某类型的常量,则必须给它赋初值,且在程序中不得改变,它就成了某个值的代名词。
-
diff --git a/程序设计语言原理/第4章 面向对象程序设计语言.md b/程序设计语言原理/第4章 面向对象程序设计语言.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/程序设计语言原理/第5章 函数式程序设计语言.md b/程序设计语言原理/第5章 函数式程序设计语言.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/程序设计语言原理/第6章 逻辑式程序设计语言.md b/程序设计语言原理/第6章 逻辑式程序设计语言.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/程序设计语言原理/第7章 并发式程序设计语言.md b/程序设计语言原理/第7章 并发式程序设计语言.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/程序设计语言原理/第9章 指称语义的原理与应用.md b/程序设计语言原理/第9章 指称语义的原理与应用.md
deleted file mode 100644
index 8eb03e19..00000000
--- a/程序设计语言原理/第9章 指称语义的原理与应用.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# 指称语义的原理与应用
-
-## 1 指称语义原理
-
-### 指称语义定义
-
-φ〖p〗→d (p∈P,d∈D)。
-
-φ为短语p的语义函数,D为语义域。语义域D中的数学实体d, 或以辅助函数表达的复杂数学实体d',称为该短语的数学指称物,即短语在语义函数下的指称语义。这样,程序的行为可以完全以数学实体表达。
-
-### 语义函数
-
-语义函数的变元是语法中的短语(当然可以是代表整个程序的短语,如PROGRAM),其映射指称物即语义。
-
-## 2 指称语义实例
-
-
-## 3 程序抽象的语义描述
-
-## 4 指称语义应用
\ No newline at end of file
diff --git a/程序设计语言原理/补充:Fortran补充.md b/程序设计语言原理/补充:Fortran补充.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/程序设计语言原理/补充:编译原理.md b/程序设计语言原理/补充:编译原理.md
deleted file mode 100644
index f154ffde..00000000
--- a/程序设计语言原理/补充:编译原理.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# 程序设计语言规格说明
-
-## 1 语言字符集
-
-允许出现在语言的程序里出现的字符的全体
-
-## 2 词法
-### 词法定义
-
-构成程序的基本词法元素包括标识符、运算符、字面量、注释等。复杂的词需要明确定义的构词法,即词法
-
-
-### 词法元素
-
-* 标识符:文字形式的词法对象,用于表示语言里的关键字、程序对象的名字
-* 关键字:语言规定了特殊意义的标识符
-* 保留字:语言中规定了特殊意义,而且不允许程序员用于其他用途的标识符,C语言中的关键字都是保留字。
-* 运算符:有预定义意义的特殊字符或特殊字符序列。语言定义的运算、算术运算、逻辑运算
-* 分隔符:用于分隔程序里的不同词法元素的特殊符号或标识符。空格,换行和制表符
-
-### 词法分析
-
-* 由程序的字符序列得到词法元素序列的过程就是词法分析。
-* 编译器处理表示源程序的字符序列,根据词法规则做词法分析,将 源程序切分为符合词法的段,识别出源程序的有意义单词
-* 词法分析得到一个(表达被分析的源程序的)单词流,流中各单词 标明了词法类别。
-* 词法分析中抛弃所有无保留价值的分隔符(如空白符)和噪声词
-* 词法分析通常采用最长可能原则,确定可能成为单词的最长字符串。
-
-### 词法分析语法分析总过程
-
-
-## 3 语法
-
-### 语法定义
-语法用于确定一个输入序列是否合法的程序。程序存在多个不同层次的合法性问题:局部结构、上下文关系(静态语法结构)、深层问题(动态语法结构)。静态语法结构可以在编译过程中进行检查,动态语法结构只能在程序执行过程中检查合法性。
-
-### 文法定义
-
-文法产生符合语法的语言规则。
-
-### 文法描述
-$$
-G=(S,N,T,P) S∈N,T∩N=Φ^*
-$$
-
-* T是终结符号串的有限集。
-* N是非终结符号串的有限集。T∩N = Φ,即它们是不相交的。
-* S是起始符号串, S∈N。
-* P是产生式
-
-$$
-α→β \\α,β∈(T∪N)^*
-$$
-* “→”表示左端可推导出右端,如α→β, α→Υ, α→δ则可写为:α→β|Υ|δ
-* 如果产生式将语言的非终结符中的每一个标记都推得为终结符号, 则这一组产生式集即为该语言的全部文法。
-
-## 4 Chomsky的四种文法
-
-产生式左符号集→右符号集,由左符号集推导出右符号集。
-
-### 0型文法
-$$
-α→β α∈(N∪T)+,β∈(N∪T)*
-$$
-递归可枚举语言 图灵机可以识别
-
-
-### 1型文法
-$$
-αAβ→αBβ α,β∈(N∪T)*,A∈N, B∈(N∪T)+
-$$
-上下文相关文法上下文敏感语言 线性有界自动机可识别
-
-### 2型文法
-$$
-A→α α∈(NUT)*,A∈N
-$$
-上下文无关文法语言 非确定下推自动机可识别
-
-### 3型文法
-$$
-A→αB|Bα α∈T*, A, B∈N
-$$
-正则文法、正则语言、有限自动机可以识别,可消除右端非终法符,P可以成为终结符表达式。
-
-
-
diff --git a/程序设计语言原理/课程安排.md b/程序设计语言原理/课程安排.md
deleted file mode 100644
index 35c97683..00000000
--- a/程序设计语言原理/课程安排.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# 课程概要
-
-
-## 1 课程安排
-
-
-## 2 考核标准
-
-### 大作业
-* 3-5人一组,设计一门程序设计语言。包括语言的类型系统、模块划分、编程范式等。包括标准库和内建方法、高级特性、进程和线程、异常处理。
-* 用lex、Yacc、Antlr等工具实现编译器。
-* 提交内容:语言的设计文档,所涉及语言的代码示例。部分实现的编译器。
-
-### 考核标准
-* 习题作业50%,其中大作业15%
-* 考试50%
-
-
-
-## 3 主要内容
-
-* 编程语言概述、形式语法复习
-* 编程语言泛型
-* 语义理论
\ No newline at end of file
diff --git a/线性代数/0 线性代数概述.md b/线性代数/0 线性代数概述.md
index ec56e342..e8694037 100644
--- a/线性代数/0 线性代数概述.md
+++ b/线性代数/0 线性代数概述.md
@@ -13,7 +13,7 @@
是同一个东西的不同表述。
-线性方程的系数表示的输入向量,多组$[x_1,\cdots,x_n]$表示多组算子。$[y_1,y_2,\cdots,y_n]$表示变换后的结果。
+线性方程的系数表示的输入向量,多组$[x_1,\cdots,x_n]$表示多组算子。$[y_1,y_2,\cdots,y_n]$表示变换后的结果。(后续补充:感觉系数像是算子,未知量像解空间)
向量空间。由多个线性无关的向量组成的向量组,称为向量空间。每一个向量表示一个算子。
@@ -34,11 +34,11 @@ $$
1. 向量在变换后仍然是直线,不会被扭曲;
2. 原点不会发生移动。
-### 5 线性变换和线性映射的区别
+## 5 线性变换和线性映射的区别
线性映射( linear mapping)是从一个向量空间V到另一个向量空间W的映射且保持加法运算和数量乘法运算,而线性变换(linear transformation)是线性空间V到其自身的线性映射。
-### 6 线性代数
+## 6 线性代数
每一组线性方程的值,每一组线性无关的向量,每一组基底,都可以构成一个矩阵,统一为一个算子。所以线性代数主要讲了两件事。什么是线性变换。如何用矩阵工具解决线性变换问题。
@@ -64,16 +64,35 @@ $$
* 秩
## 3 矩阵变换
-> 明白矩阵变换的实际意义和矩阵变换前后保留的性质。
+> 明白矩阵变换的实际意义和矩阵变换前后保留的性质。初等矩阵是由单位矩阵经过一次变换得到的矩阵。由初等矩阵的组合可以表示任何初等变换。
+
+
### 初等变换
* 对调
+$$
+A=\left[\begin{array}{cc}
+0 & 1\\
+1 & 0
+\end{array}\right]
+$$
* 数乘
-* 对调数乘
+$$
+A=\left[\begin{array}{cc}
+\lambda & 0\\
+0 & \lambda
+\end{array}\right]
+$$
+* 倍加
+
$$
-B=A
+A=\left[\begin{array}{cc}
+1 & 0\\
+k & 1
+\end{array}\right]
$$
+
> 保留的性质:
> * 线性方程组的解不变。
> * 矩阵的秩不变
diff --git a/线性代数/附录1.md b/线性代数/附录1.md
new file mode 100644
index 00000000..f8f8f183
--- /dev/null
+++ b/线性代数/附录1.md
@@ -0,0 +1 @@
+# 线性代数的本质理解
\ No newline at end of file