#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))
#数据可视化库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()