python 学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
#pip工具的主要功能
#常用pip命令
#pip install ku 安装第三方库
#pip install-U ku 更新已安装的第三方库
#pip download ku 下载但不安装
#pip uninstall ku 卸载已安装的第三方库
#pip show ku 显示第三方库详细信息
#pip search 关键字 查询关键字
#pip list 列出已安装的第三方库

#.whl是python第三方库的一种打包格式

#数值计算库numpy
#数组类numpy.array
#numpy库常用创建数组函数
'''
import numpy as n
n.array(objcet,type) type是数据类型
n.arange(x,y,d) 起始x,结束y-1,步长为d等差数组
n.linspace(x,y,n) 起始x,结束y,等分成n个等差数组
n.zeros((m,n)) m行n列全0数组
n.oncs((m,n)) m行n列全1数组
n.cmpty((m,n)) m行n列随机数组
n.random.rand(m,n) m行n列0~1随机数组
n.eye(m,n) m行n列对角线元素为1,其余为0的数组
'''
import numpy as p
x0=p.array((0,1,2,3,4,5,6))
x1=p.array([0,1,2,3,4,5,6],dtype=p.float32)
x2=p.arange(0,10,2)
x3=p.linspace(0,10,11)
x4=p.zeros((3,4))
x5=p.ones((2,3))
x6=p.empty((3,2))
x7=p.random.rand(4,5)
x8=p.eye(3)
print("x0=",x0)
print("x1=",x1)
print("x2=",x2)
print("x3=",x3)
print("x4=",x4)
print("x5=",x5)
print("x6=",x6)
print("x7=",x7)
print("x8=",x8)

#使用numpy库创建的数组具有的常见属性见表
'''
ndarray.dtype #元素类型
ndarray.ndim #轴个数或维度(秩)
ndarray.shape #维度
ndarray.size #总个数
ndarray.real #实部
ndarray.imag #虚部
ndarray.itemsize #每个元素的大小
'''

import numpy as np
x1=np.linspace(0,10,11) #一维
print("x1=",x1)
print("x1.dtype=",x1.dtype)
print("x1.ndim=",x1.ndim)
print("x1.shape",x1.shape)
print("x1.size",x1.size)
x2=np.array([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]])
print("x2=",x2) #二维
print("x2.dtype=",x2.dtype)
print("x2.ndim=",x2.ndim)
print("x2.shape",x2.shape)
print("x2.size",x2.size)

#改变数组形状的方法
'''
ndarray.reshape(m,n) #返回m行n列的数组,但不改变原数组
ndarray.resize(m,n) #返回m行n列的数组,且直接修改原数组
ndarray.flatten() #返回一个一维数组的拷贝
ndarray.ravel() #返回一个一维数组的视图
ndarray.transpose() #交换数组的维度
ndarray.T #返回一个转置数组
'''

import numpy as np
x = np.linspace(1, 12, 12)
y = np.array([[11, 12, 13], [21, 22, 23], [31, 32, 33]])

x1 = x.reshape(3, 4)
x2 = x.reshape(2, -1)
x3 = x.reshape(2, 3, 2)

y1 = y.flatten()
y2 = y.ravel()
y3 = y.transpose()
y4 = y.T

print("x=", x)
print("y=", y)
print("x1=", x1)
print("x2=", x2)
print("x3=", x3)

print("y1=", y1)
print("y2=", y2)
print("y3=", y3)
print("y4=", y4)

#数组的索引和切片
'''
x[i] #第i+1个元素
x[-i] #反向第i个元素
x[i:j] #第i+1个到第j个元素
x[i:] #第i+1个到最后一个元素
x[-j:-i] #反向第j个到第i+1个元素
x[i:j:d] #步长为d
'''
import numpy as np
x=np.arange(1,11)
y=np.linspace(1,12,12).reshape(3,4)

x1=x[0]
x2=x[-1]
x3=x[2:6]
x4=x[2:]
x5=x[-10:-8]
x6=x[0:11:2]

y1=y[1:3]
y2=y[1:3,2:4]
y3=y[2:3:]
y4=y[:,2:4]
y5=y[-3:-1,-4:-1]

print("x=",x)
print("x[0]=",x1)
print("x[-1]",x2)
print("x[2:6]=",x3)
print("x[2:]",x4)
print("x[-10:-8]=",x5)
print("x[0,11,2]=",x6)

print("y=",y)
print("y[1:3]",y1)
print("y[1:3,2:4]=",y2)
print("y[2:3,:]",y3)
print("y[:,2:4]",y4)
print("y[-3:-1,-4:-1]=",y5)

#数组算数运算
'''
np.add() 加
np.subtract() 减
np.multiply() 乘
np.divide() 除
'''
import numpy as np
x=np.arange(1,5)
y=np.linspace(7,10,4)
z=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print("x=",x)
print("y=",y)
print("z=",z)

print("x+y=",np.add(x,y))
print("x-y=",np.subtract(x,y))
print("x*y=",np.multiply(x,y))
print("x/y=",np.divide(x,y))

print("x+z=",np.add(x,z))
print("x-z=",np.subtract(x,z))
print("x*z=",np.multiply(x,z))
print("x/z=",np.divide(x,z))


#数组函数运算
"""
np.sin(x)
np.cos(x)
np.tan(x)
np.sqrt(x) #平方根
np.round(x) #四舍五入
np.floor(x) #向下取整
np.ceil(x) #向上取整
np.exp(x) #指数
np.log(x) #对数值
"""
import numpy as np
x=np.arange(0,100,10)
y=np.random.rand(10)
print("x=",x)
print("y=",y)

print("x_sin=",np.sin(x))
print("x_cos=",np.cos(x))
print("x_tan=",np.tan(x))
print("y_sqrt-",np.sqrt(y))
print("y_round",np.round(y))
print("y_floor",np.floor(y))
print("y_ceil",np.ceil(y))
print("y_exp",np.exp(y))
print("y_log",np.log(y))

#数组关系运算函数
'''
np.equal(x,y) #数组x是否等于数组y
np.not_equal(x,y) #x是否不等于y
np.less(x,y) #x是否小于y
np.less_equal(x,y) #x是否小于等于y
np.greater(x,y) #x是否大于y
np.greater_equal(x,y) #x是否大于等于y
'''
import numpy as np
x=np.random.randint(0,10,size=(3,3))
y=np.random.randint(0,10,size=(3,3))
print("x=",x)
print("y=",y)
print("x==y",np.equal(x,y))
print("x!=y",np.not_equal(x,y))
print("x<y",np.less(x,y))
print("x<=y",np.less_equal(x,y))
print("x>y",np.greater(x,0.5))
print("x>=y",np.greater_equal(x,y))

#统计分析
'''
np.amin(x,[axis=0或1]) #返回最小值(0纵,1横)
np.amax(x,[axis=0或1]) #返回最大值
np.ptp(x,[axis=0或1]) #返回指定轴中值的范围(最大值-最小值)
np.mediam(x,[asix=0或1]) #返回指定轴中轴的值
np.sum(x,[asix=0或1]) #返回指定轴元素之和
np.mcan(x,[asix=0或1]) #返回指定轴元素平均值
np.var(x,[asix=0或1]) #返回指定轴元素方差
np.std(x,[asix=0或1]) #返回指定轴元素标准差
'''
import numpy as np
x=np.linspace(1,10,10).reshape(2,5)
print("x=",x)

print("x__amin__0=",np.amin(x,axis=0))
print("x__amin__1=",np.amin(x,axis=1))
print("x__amin=",np.amin(x))

print("x__amax__0=",np.amax(x,axis=0))
print("x__amax__1=",np.amax(x,axis=1))
print("x__amax=",np.amax(x))

print("x__ptp__0=",np.ptp(x,axis=0))
print("x__ptp__1=",np.ptp(x,axis=1))
print("x__ptp=",np.ptp(x))

print("x__median__0=",np.median(x,axis=0))
print("x__median__1=",np.median(x,axis=1))
print("x__median=",np.median(x))

print("x__sum__0=",np.sum(x,axis=0))
print("x__sum__1=",np.sum(x,axis=1))
print("x__sum=",np.sum(x))

print("x__mean__0=",np.mean(x,axis=0))
print("x__mean__1=",np.mean(x,axis=1))
print("x__mean=",np.mean(x))

print("x__var__0=",np.var(x,axis=0))
print("x__var__1=",np.var(x,axis=1))
print("x__var=",np.var(x))

print("x__std__0=",np.std(x,axis=0))
print("x__std__1=",np.std(x,axis=1))
print("x__std=",np.std(x))


#线性代数运算
'''
np.dot(x,y) 返回两个数组的点积
np.vdot(x,y) 返回两个向量的点积
np.inner(x,y) 返回两个数组的内积
np.matmul(x,y) 返回两个数组的矩阵积
np.linalg(x,y) 计算数组的行列积
np.linalg.solve(x,y) 求解线性方程组
np.linalg.inv(x,y) 计算矩阵的乘法逆矩阵
'''
import numpy as np
x=np.arange(1,13).reshape(3,4)
y=np.arange(13,25).reshape(4,3)
z=np.array([[1,1,1],[0,2,5],[2,5,-1]])
b=np.array([6,-4,27])

print("x=",x)
print("y=",y)

print("x__dot__y",np.dot(x,y))
print("x__vdot__y",np.vdot(x,y))
print("x__matmul__y",np.matmul(x,y))
print("x__inner__y",np.inner(x,x))

print("z__det",np.linalg.det(z))
print("z__solove__b",np.linalg.solve(z,b))
print("z__inv",np.linalg.inv(z))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#数据可视化库matpolotlib
#字库pyplot
'''
import matplotlib.pyplot as plt
plt.plot(x,y,linewhidth,linestyle,color) #绘制直曲线图
plt.scatter(x,y,s,c) #绘制散点图
plt.hist(x,num_bline) #绘制直方图
plt.pie(x,labels,explode) #绘制饼图
plt.polar(theta,radii) #绘制极坐标图
plt._surface(x,y,z) #绘制3D图
plt.boxplot(data,notch,position) #绘制一个箱型图
plt.bar(left,height,width) #绘制条形图
plt.step(x,y,where) #绘制步阶图
'''

#绘制三角函数
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,256)
y1=np.sin(x)
y2=np.cos(x)
plt.plot(x,y1,7,7,7,7,7,7) #线条宽度,样式,颜色,标记风格,颜色,大小
plt.plot(x,y2,6,6,6)
plt.show()

#标签和图例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='simHei' #显示中文字体,使用黑体
matplotlib.rcParams['font.sans-serif']=['simHei']
plt.rcParams['axes.unicode_minus']=False #显示负号

x=np.linspace(0,2*np.pi,100)
y1=np.sin(x)
y2=np.cos(x)
plt.plot(x,y1,label='sin')
plt.plot(x,y2,label='cos')
plt.title("sinx和cosx函数") #添加标题
plt.xlabel("时间") #x轴标签
plt.ylabel("数值") #y轴标签
plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],[r'$0$',r'$pi/2$',r'$\pi$',r'$3\pi/2$',r'$2/pi$']) #刻度标签和值
plt.yticks([-1,-0.5,0,0.5,1,1.5],[r'$-1$',r'$-0.5$',r'$0$',r'$0.5$',r'$1$',r'$1.5$']) #刻度标签和值
plt.legend(loc="upper right") #添加图例,设置位置
plt.show()

#绘制散点图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='simHei' #显示中文字体,使用黑体
matplotlib.rcParams['font.sans-serif']=['simHei']

N=50 #散点个数
x=np.random.rand(N)
y1=np.random.rand(N) #弱相关
y2=x #强相关
#弱相关图
ax1=plt.subplot(121) #区域
area=np.pi*(5*np.random.rand(N))**2 #设置点大小(默认20)
color=np.random.rand(N) #设置点颜色
plt.scatter(x,y1,s=area,c=color,alpha=0.5,cmap=plt.cm.hsv) #cmap设置颜色转换
plt.title('弱相关性') #透明度(0~1)#颜色图谱映射
plt.colorbar()
#强相关图
ax2=plt.subplot(122,sharey=ax1,sharex=ax1)
area=np.pi*(5*np.random.rand(N))**2
color=np.random.rand(N)
plt.scatter(x,y2,s=area,c=color,alpha=0.5,cmap=plt.cm.hsv)
plt.title('强相关性')
plt.colorbar()
plt.show()

#绘制直方图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams["font.family"]="simHei"
matplotlib.rcParams["font.sans-serif"]=["simHei"]
mu=100 #期望
sigma=15 #标准差
x = mu+sigma * np.random.randn(10000) #样本
num_bins=50 #矩形个数
n,bins,patches=plt.hist(x,num_bins,density=1,facecolor='g',alpha=0.75)
#绘制直方图
y =((1/( np.sqrt(2*np.pi)*sigma))*np.exp(-0.5*(1/sigma*(bins-mu))**2))
plt.plot (bins,y,'r--')
plt.xlabel("期望")
plt.ylabel("概率")
plt.title("正态分布直方图:$vmu=100$,$\sigma=15$")
plt.show()

#绘制饼图
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams["font.family"]="simHei"
matplotlib.rcParams["font.sans-serif"]=["simHei"]
values =[0.17253,0.16086,0.10308,0.06196,0.04801,0.04743,0.40613]
#每个标签所对应数值
labels=[" Java ", " C ", " Python ", " C++", " C# ", ".NET ", "其他"] #标签
explode=[0, 0, 0.1, 0, 0, 0, 0] #扇区离圆心距离
plt.axes(aspect='equal') #横、纵坐标标准化处理,保证是圆
plt.xlim(0.8) #设置 x 轴、 y 轴范围
plt.ylim(0.8)
#绘制饼图
plt.pie(x=values, labels=labels, explode=explode, autopct="%.3f%", pctdistance=0.8, labeldistance=1.15, startangle=90, counterclock=False)
#各类数据,各类数据代表标签,半径,百分比格式,百分比标签与圆心距离,扇区标签与圆心距离,饼图起始绘制角度,饼图绘制方向(默认逆时针)
plt.xticks(()) #删除 x 轴和 y 轴刻度
plt.yticks(())
plt.title("2019年12月编程语言指数排行榜")
plt.legend(title="程序语言", loc="center right ", bbox_to_anchor=(1.3, 0.5))
#设置标签的标题和位置
plt.show()


#绘制极坐标图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams["font.family"]="simHei"
matplotlib.rcParams["font.sans-serif"]=["simHei"]
N=20
theta=np.linspace(0,2*np.pi,N,endpoint=False) #设置极角
radii=10*np.random.rand(N) #设置极径
width=np.pi/4*np.random.rand( N ) #设置条形宽度
color=plt.cm.viridis( np.random.rand(N)) #设置颜色
#绘制极坐标条形图
axl=plt.subplot (121, projection =' polar ')
ax1.bar(theta, radii, width=width, bottom=0.0, color=color)
plt.title("极坐标条形图")
#绘制极坐标散点图
ax2=plt.subplot(122, projection='polar')
area=np.pi*radii**2
color=np.random.rand(N)
ax2.scatter (theta, radii, c=color, s=area )
plt.title("极坐标散点图")
plt.show()


#绘制三维图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from mpl_toolkits.mplot3d import Axes3D #导入mpllot3D扩展包
fig=plt.figure()
ax=plt.axes(projection="3d") #创建3d对象函数
xdata=np.arange(-5,5,0.5)
ydata=np.arange(-5,5,0.5)
x,y=np.meshgrid(xdata,ydata)
z=np.sin(x)+np.cos(y)
ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap="rainbow")
ax.contour(x,y,z,offset=-2,cmap="rainbow")
plt.show()