zoukankan      html  css  js  c++  java
  • (九)python语法之机器学习

    1.numpy

    创建

    import numpy as np
    
    print(np.array([1,2,3], dtype=np.float32)) 
    # [1. 2. 3.]
    print(np.arange(3))        
    # [0 1 2]
    
    print(np.linspace(1,10,4)) 
    # [1. 4. 7. 10.] 间距=(10-1)/(4-1)
    print(np.linspace(1,10,4, endpoint=False)) 
    # [1. 3.25 5.5 7.75] 间距=(10-1)/4
    
    np.ones((3,3))     # 3x3元素全为1.的矩阵
    np.zeros((3,3))    # 3x3元素全为0.的矩阵
    np.full((3,3), 2)  # 3x3元素全为2的矩阵
    np.eye(3)          # 3x3单位矩阵 
    
    a = np.arange(12).reshape(3,4) 
    np.ones_like(a)    # 3x4元素全为1的矩阵
    np.zeros_like(a)   # 3x4元素全为0的矩阵
    np.full_like(a, 2) # 3x4元素全为2的矩阵  
    
    np.random.seed(10) # 随机数种子
    np.random.random() # 产生随机数
    
    # 由[10,20)的随机整数构成的4x4矩阵
    np.random.randint(10,20,(4,4)) 
    # 4x4服从0~1均匀分布的随机矩阵
    np.random.rand(4,4)  
    # 4x4服从标准正态分布的随机矩阵
    np.random.randn(4,4)     
    # 从[0,10)均匀取值的4x4随机矩阵
    np.random.uniform(0,10,(4,4)) 
    # 4x4服从均值为2标准差为3的正态分布的随机矩阵
    np.random.normal(2,3,(4,4)) 
    # 4x4服从lambda为2的泊松分布的随机矩阵
    np.random.poisson(2,(4,4))  
    
    # 从一维数组a中以概率p抽取3x3的元素,replace表示是否可以重用元素
    a = np.arange(10)
    print(np.random.choice(a,(3,3),replace=False,p=a/np.sum(a)))
    
    # 就地打乱数组,随机交换行
    a = np.arange(12).reshape(3,4) 
    np.random.shuffle(a)         
    print(a)   
    
    # 打乱数组,生成新数组
    a = np.arange(12).reshape(3,4)
    b = np.random.permutation(a) 
    print(b)
    

    属性

    import numpy as np
    
    a = np.arange(12).reshape(3,4) 
    print(a.shape)    # (3, 4)
    print(a.dtype)    # int32
    print(a.ndim)     # 2 维度的数量
    print(a.size)     # 12 元素个数
    print(a.itemsize) # 4 元素的字节大小
    print(a.mean())   # 5.5 所有元素平均值
    
    print(a.sum())       # 66 所有元素的和
    print(a.sum(axis=1)) # 1轴求和 [6 22 38]
    print(a.sum(axis=0)) # 0轴求和 [12 15 18 21]
    
    a.argsort(axis=0) # 3x4 0轴排序后的索引
    a.argmax(axis=0)  # 1x4 0轴最大值的索引
    
    a[1:4:2] # 0维取第1行 起始:终止:步长
    a[:,1]   # 0维取全部,一维取第1列
    a[:,1:3] # 0维取全部,一维取第1、2列
        
    a.astype(np.float) # 修改元素类型
    a.tolist()         # 将数组转化为列表
    a.flatten()        # 展开成一维数组
    a.reshape((4,3))   # reshape成4x3矩阵
    a.swapaxes(0,1)    # 维度调换
    

    操作

    #1 根据布尔值掩码改变元素
    a = np.array([1,2,3,4,5], dtype=np.int)
    a[a < 3] = 0   
    print(a) 
    # [0 0 3 4 5]
    
    #2 去重并按顺序返回一维数组
    print(np.unique([1, 2, 2, 5, 3, 4, 3]))
    # [1 2 3 4 5]
    
    #3 边界裁剪(设定最小为3,最大为8)
    a = np.array([1,2,3,5,6,7,8,9])
    print(np.clip(a, 3, 8))  
    # array([3, 3, 3, 5, 6, 7, 8, 8])
    
    #4 np.where()
    #  满足条件返回a,不满足返回0
    a = np.array([1, 2, 3, 4, 5])
    print(np.where(a < 3, a, 0)) 
    #  [1 2 0 0 0]
    # 返回满足条件的索引
    print(np.where(a < 3))       
    # (array([0, 1], dtype=int64),)
    
    #5 np.nonzero()返回非0值的索引
    print(np.nonzero([0,1,2,3]))  
    # (array([1, 2, 3], dtype=int64),)
    
    #6 连接
    a = np.array([[1, 2], 
                  [3, 4]])
    b = np.array([[5, 6]])   
    print(np.concatenate((a, b), axis=0))
    # [[1 2]
    #  [3 4]
    #  [5 6]]
      
    #7 堆叠
    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])
    print(np.stack((a, b), axis=0)) 
    # [[1 2 3]
    #  [4 5 6]]
    print(np.stack((a, b), axis=1)) 
    # [[1 4]
    #  [2 5]
    #  [3 6]]
    
    #8 np.tile()整体重复
    #  [0,0]横向重复5次
    print(np.tile([0,0],5))        
    # [0 0 0 0 0 0 0 0 0 0]
    # [0,0]先竖向重复5次,再横向重复两次
    print(np.tile([0,0],(5,2)))    
    # [[0 0 0 0]
    #  [0 0 0 0]
    #  [0 0 0 0]
    #  [0 0 0 0]
    #  [0 0 0 0]]
    
    #9 np.repeat()单独重复
    a = np.array([[1,2],
                  [3,4]])
    print(np.repeat(a, 3, axis=1))
    # [[1 1 1 2 2 2]
    #  [3 3 3 4 4 4]]
    
    #10 np.pad()填充
    # 前面填充1位0 后面填充2位2
    a = np.array([1, 1, 1])
    b = np.pad(a,(1,2),'constant', constant_values=(0,2)) 
    print(b) 
    # [0 1 1 1 2 2] 
    
    # 先在行上填充一行0、行下填充一行3,再在列左填充两列0、列右填充两列3
    a = np.array([[1,1],
                  [2,2]])
    b = np.pad(a,((1,1),(2,2)),'constant', constant_values=(0,3)) 
    print(b)
    # [[0 0 0 0 3 3]
    #  [0 0 1 1 3 3]
    #  [0 0 2 2 3 3]
    #  [0 0 3 3 3 3]]
        
    #11 旋转
    mat = np.arange(9).reshape(3,3)
    print(mat)
    print(np.rot90(mat, 1)) # 逆时针旋转90度
    print(np.rot90(mat, 2)) # 逆时针旋转180度
    
    #12 生成网格
    x = np.array([0, 1, 2])
    y = np.array([0, 1])
    X, Y = np.meshgrid(x, y)
    print(X)
    print(Y)
    

    数学

    import numpy as np
    
    np.abs(-1), np.fabs(-1)
    np.sqrt(4), np.square(2)
    np.ceil(4.5), np.floor(4.5)
    np.exp(0) 
    np.log(np.e), np.log10(10), np.log2(2)
    np.cos(0), np.sin(0), np.tan(0)
    np.cosh(0), np.sinh(0), np.tanh(0)
    
    print(np.sign(2))   # 1 符号函数  
    print(np.rint(4.6)) # 5.0 四舍五入
    print(np.mod(5, 2)) # 1 取余
    print(np.modf(4.6)) # 返回小数和整数
    print(np.copysign(3, -6)) # -3.0 拷贝符号
    print(np.gradient([1,3,6,10])) 
    # [2. 2.5 3.5 4.] 梯度计算 
    
    print(np.logical_and(1, 0)) # False 
    print(np.logical_or(1, 0))  # True  
    print(np.logical_not(1))    # False 
    
    print(np.maximum(1, 3))         # 3 
    print(np.minimum([1,4], [2,3])) # [1 3] 
    
    a = np.arange(6) 
    np.min(a)            # 最小值
    np.max(a)            # 最大值
    np.argmin(a)         # 最小值的下标
    np.argmax(a)         # 最大值的下标
    np.sum(a,axis=None)  # 求和
    np.mean(a,axis=None) # 均值
    np.median(a)         # 中位数
    np.std(a,axis=None)  # 标准差
    np.var(a,axis=None)  # 方差
    np.ptp(a)            # 最大值-最小值 
    np.corrcoef(a, a)    # 相关系数
    

    矩阵

    import numpy as np
    
    a = np.random.randn(3,3)
    m = np.mat(a) # 将数组转化为numpy.matrix
    print(m.A)    # 将矩阵转换为数组
    print(m.T)    # 矩阵转置           
    print(m.I)    # 求逆矩阵
    
    print(np.linalg.det(m))     # 求行列式 
    print(np.linalg.eigvals(m)) # 求特征值
    
    # 求解 mx = v
    v = np.random.randn(3)      
    x = np.linalg.solve(m,v)  
    print(x)
    

    存储

    import numpy as np
    
    # csv形式的保存和加载
    a = np.arange(12).reshape(3,4)
    np.savetxt('np.csv',a,fmt='%d',delimiter=',')       
    b = np.loadtxt('np.csv',dtype=np.int,delimiter=',') 
    print(b)
    
    # 多维数据的存储
    a = np.arange(24).reshape(2,3,4)
    a.tofile('np.dat',sep=',',format='%d') 
    b = np.fromfile('np.dat',dtype=np.int,sep=',')
    b = b.reshape(2,3,4) 
    print(b)
    
    # 快捷存储
    a = np.arange(24).reshape(2,3,4)
    np.save('np.npy',a)
    b = np.load('np.npy')
    print(b)
    

    2.pandas

    Series

    # 带标签的一维数组
    
    import pandas as pd
    import numpy as np
    
    #1 创建
    print(pd.Series([9,8,7]))     
    # 自动索引 0 9 1 8 2 7 
    print(pd.Series([9,8,7], index=['a','b','c'])) 
    # 自定义索引 a 9 b 8 c 7
    print(pd.Series({'a':9,'b':8,"c":7})) 
    # a 9 b 8 c 7
    
    #2 属性
    s = pd.Series([9,8,7,6],['a','b','c','d'])
    print(s.index)  # 获取索引
    print(s.values) # 获取值
    
    #3 索引
    print(s[0], s['a'])  # 9 9
    print(s[:3])         # a 9 b 8 c 7
    print('c' in s)      # True
    print(s.get('f', 0)) # 0 索引不存在时返回0
    
    #4 操作
    s['a'] = 90
    s['b','c'] = 80
    s[s > s.median()] = 100
    print(s) 
    # a 100 b 80 c 80 d 6
    print(s.drop(['b','c'])) 
    # a 100 d 6 drop操作不改变s
    
    s2 = np.exp(s)
    print(s+s2)
    

    DataFrame

    # 带标签的二维数组
             
    import pandas as pd
    import numpy as np
    
    #1 创建
    print(pd.DataFrame(np.arange(10).reshape(2,5)))
    #   0 1 2 3 4
    # 0 0 1 2 3 4
    # 1 5 6 7 8 9
    
    dt = {'one': pd.Series([1,2,3],['a','b','c']),
          'two': pd.Series([9,8,7,6],['a','b','c','d'])}
    print(pd.DataFrame(dt))
    #   one two
    # a 1.0  9
    # b 2.0  8
    # c 3.0  7
    # d NaN  6
    print(pd.DataFrame(dt,index=['b','c','d'],columns=['two','three']))
    #   two three
    # b  8   NaN
    # c  7   NaN
    # d  6   NaN
    
    #2 属性
    dt = {'one': [1,2,3,4], 'two': [9,8,7,6]}
    d = pd.DataFrame(dt,index=['a','b','c','d'])
    #   one two
    # a  1   9
    # b  2   8
    # c  3   7
    # d  4   6
    print(d.index)   
    # Index(['a', 'b', 'c', 'd'], dtype='object')
    print(d.columns) 
    # Index(['one', 'two'], dtype='object')
    print(d.values)
    print(d['one'])
    print(d['one']['a']) # 1
    
    #3 运算
    dt = {'one': [1,2,3,4], 'two': [9,8,7,6]}
    d = pd.DataFrame(dt,index=['a','b','c','d'])
    #   one two
    # a  1   9
    # b  2   8
    # c  3   7
    # d  4   6
    
    print(d.add(1, fill_value=100))
    print(d.sub(1))
    print(d.mul(2))
    print(d.div(pd.Series([2,3], index=['one','two'])))
    #    one    two
    # a  0.5  3.000000
    # b  1.0  2.666667
    # c  1.5  2.333333
    # d  2.0  2.000000
    
    print(d > 5)
    print(d > pd.Series([2,3], index=['one','two']))
    #     one   two
    # a  False  True
    # b  False  True
    # c   True  True
    # d   True  True
    
    #4 索引排序
    d = pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
    #     0   1   2   3   4
    # c   0   1   2   3   4
    # a   5   6   7   8   9
    # d  10  11  12  13  14
    # b  15  16  17  18  19
    
    print(d.sort_index())
    print(d.sort_index(axis=1, ascending=False))
    #     4   3   2   1   0
    # c   4   3   2   1   0
    # a   9   8   7   6   5
    # d  14  13  12  11  10
    # b  19  18  17  16  15
    
    #5 值排序
    np.random.seed(0)
    d = pd.DataFrame(np.random.randint(1,9,(4,5)),index=['c','a','d','b'])
    #    0  1  2  3  4
    # c  5  8  6  1  4
    # a  4  4  8  2  4
    # d  6  3  5  8  7
    # b  1  1  5  3  2
    
    print(d.sort_values(2, ascending=False))
    print(d.sort_values('d', axis=1))
    #    1  2  0  4  3
    # c  8  6  5  4  1
    # a  4  8  4  4  2
    # d  3  5  6  7  8
    # b  1  5  1  2  3
    

    统计函数

    import pandas as pd
    
    # Series:
    s = pd.Series([5,8,9,4],['a','b','c','d'])
    print(s.argmin(), s.argmax()) # 3 2
    print(s.idxmin(), s.idxmax()) # d c
    
    # Series和DataFrame:
    s = pd.Series([5,8,2,4],['a','b','c','d'])
    print(s.sum())      # 19 
    print(s.count())    # 4
    print(s.mean())     # 4.75
    print(s.median())   # 4.5
    print(s.min())      # 2
    print(s.max())      # 8
    print(s.var())      # 6.25
    print(s.std())      # 2.5
    print(s.describe()) # 给出一些基本的统计值
    
    s.cumsum()  # 依次给出前1、2...个数的和
    s.cumprod() # 依次给出前1、2...个数的积
    s.cummax()  # 依次给出前1、2...个数的最大值
    s.cummin()  # 依次给出前1、2...个数的最小值
    
    s.rolling(2).sum()  #依次计算相邻2个数的和
    s.rolling(2).mean() #依次计算相邻2个数的均值
    s.rolling(2).var()  #依次计算相邻2个数的方差
    s.rolling(2).std()  #依次计算相邻2个数的标准差
    s.rolling(2).min()  #依次计算相邻2个数的最小值
    s.rolling(2).max()  #依次计算相邻2个数的最大值
    
    d = pd.DataFrame(np.arange(20).reshape(4,5),index=['c','a','d','b'])
    #     0   1   2   3   4
    # c   0   1   2   3   4
    # a   5   6   7   8   9
    # d  10  11  12  13  14
    # b  15  16  17  18  19
    print(d.describe())
    

    3.matplotlib

    基本绘图

    import matplotlib.pyplot as plt
    
    plt.title('Test')    # 标题
    plt.xlabel("Time")   # x轴标签
    plt.ylabel("Num")    # y轴标签
    plt.grid(True)       # 显示网格线
    
    # 设置横坐标(0,10),纵坐标(0,6)
    plt.axis([0,10,0,6]) 
    
    # 绘制,x轴为(0,1,2,3)
    plt.plot([1,2,3,4])  
    
    # 绘制(x,y)
    plt.plot([0,2,4,6],[1,2,3,4]) 
    
    plt.savefig('plt', dpi=600)   # 保存为图片
    plt.show()                    # 显示
    

    绘图样式

    import matplotlib.pyplot as plt
    
    a = np.arange(0., 5., 0.2)
    plt.plot(a,a,'go-', a,a*1.5,'rx', a,a**2,'b-.', linewidth=2.0) 
    
    '''
    颜色字符:b蓝色 g绿色 r红色 c青绿色 m洋红色 y黄色 k黑色 w白色
    
    风格字符:-实线 --破折线 -.点划线 :虚线 ''无线条
    
    标记字符:
    .点标记 ,像素标记 o实心圈 
    v倒三角 ^上三角 >右三角 <左三角
    1下花三角 2上花三角 3左花三角 4右花三角
    s实心方形 p实心五角 *星形 h竖六边形 H横六边形
    +十字 x标记 D菱形 d瘦菱形 |垂直线
    '''
    

    绘图区域

    import matplotlib.pyplot as plt
    
    a = np.arange(0.0,5.0,0.02)
    
    for i in range(1,5):
        # 设置两行两列,索引为1,2,3,4
        plt.subplot(2,2,i) 
        plt.plot(a, a**2)
    
    plt.show()
    

    文本箭头

    import matplotlib
    import matplotlib.pyplot as plt
    
    # 全局中文显示
    matplotlib.rcParams['font.family']='SimHei' 
    matplotlib.rcParams['font.style']='normal'  
    matplotlib.rcParams['font.size']=18 
    plt.ylabel('数量')
    
    # 局部中文显示
    plt.xlabel('时间',fontproperties='Simhei',fontsize=20,color='red') 
    
    # 文本和箭头注解
    a = np.arange(0.0,5.0,0.02)
    plt.plot(a, a**2)
    
    plt.text(1,2,'mu=10',fontsize=15)
    
    plt.annotate('mu=10',xy=(2,1),xytext=(3,1.5), arrowprops=dict(facecolor='black',shrink=0.1,width=1))
    

    绘制图表

    import matplotlib.pyplot as plt
    import numpy as np
    
    #1 饼图
    labels = 'Apple','Banana','Cherry','Date'
    sizes  = [15,30,45,10]
    explode = (0,0,0.1,0) # 表示突出谁
    plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',
    shadow=False,startangle=90)
    plt.axis('equal')     # 绘制圆形的饼
    plt.show()
    
    #2 散点图绘制
    fig, ax = plt.subplots()
    ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
    ax.set_title('Scatter')
    plt.show()
    
    #3 直方图绘制
    np.random.seed(0)
    mu, sigma = 100, 20 
    a = np.random.normal(mu, sigma, size=100)
    plt.hist(a,10,histtype='stepfilled',facecolor='b',alpha=0.75) 
    # 10是直方的个数
    
    #4 极坐标绘制
    N = 20
    theta = np.linspace(0.0,2*np.pi,N,endpoint=False)
    radii = 10*np.random.rand(N)
    width = np.pi/4*np.random.rand(N)
    ax = plt.subplot(111,projection='polar')
    bars = ax.bar(theta,radii,width=width,bottom=0.0) 
    for r,bar in zip(radii,bars):
        bar.set_facecolor(plt.cm.viridis(r/10.))
        bar.set_alpha(0.5)
    plt.show()
    
  • 相关阅读:
    这篇通俗实用的Vlookup函数教程,5分钟就可以包你一学就会
    nginx 常见正则匹配符号表示
    Nginx if 条件判断
    nginx 将请求全部指向到一个页面
    windows10下面部署nginx(解决文件名中文乱码问题)
    二.Nginx反向代理和静态资源服务配置
    Nginx的使用(一)代理静态文件
    使用Nginx反向代理和内容替换模块实现网页内容动态替换功能
    如何让NGINX显示文件夹目录
    Nginx 如何设置反向代理 多服务器,配置区分开来,单独文件保存单个服务器 server 主机名配置,通过 include 实现
  • 原文地址:https://www.cnblogs.com/qxcheng/p/13536421.html
Copyright © 2011-2022 走看看