zoukankan      html  css  js  c++  java
  • python常用模块(2)

    1. numpy模块

    # numpy: 专门数组(矩阵)的运算
    
    lis1 = [1,2,3]  # 向量
    lis2 = [4,5,6]  # 向量
    
    # [4,10,18]
    
    lis = []
    for i in range(len(lis1)):
        lis.append(lis1[i] * lis2[i])
    print(lis)
    
    
    import numpy as np
    
    arr1 = np.array([1,2,3])
    arr2 = np.array([4,5,6])
    print(arr1*arr2)
    
    
    import numpy as np
    
    
    # numpy 数组
    arr = np.array([1,2,3])
    print(arr)  # 一维的numpy数组
    
    arr2 = np.array([[1,2,3],[4,5,6]])
    print(arr2)  # 二维的numpy数组(一般就是二维)
    
    
    arr3 = np.array([[[1,2,3],[4,5,6]],[1,2,3],[4,5,6]])
    print(arr3)
    
    # 三维的不使用numpy模块,使用tensorflow/pytorch模块
    
    # 属性(可以记)
    '''
    T	数组的转置(对高维数组而言)
    dtype	数组元素的数据类型
    size	数组元素的个数
    ndim	数组的维数
    shape	数组的维度大小(以元组形式)
    astype	类型转换
    '''
    import numpy as np
    
    arr2 = np.array([[1,2,3],[4,5,6]])
    print(arr2)  # 二维的numpy数组(一般就是二维)
    print(arr2.T)  #  行与列互换
    print(arr2.dtype)  # python中的数据类型  # int32
    print(arr2.astype(np.float64).dtype) # float64
    print(arr2.size)  # 6
    print(arr2.shape) # (2,3)
    print(arr2.ndim) # 2
    
    # 切片
    lis = [1,2,3]
    print(lis[:])  # [1,2,3]
    arr2 = np.array([[1,2,3],[4,5,6]])
    print(arr2)
    print(arr2[:,:])
    print(arr2[0:1,:]) # [[1 2 3]]
    print(arr2[0:1,0:1]) # [[1]]
    print(arr2[0,:])  # [1 2 3]
    print(arr2[0,0],type(arr2[0,0]))  # 1 <class 'numpy.int32'>
    print(arr2[0,[0,2]])  # [1 3]
    
    # 修改值
    lis = [1,2,3]
    lis[0] = 2
    print(lis)  # [2, 2, 3]
    
    arr2 = np.array([[1,2,3],[4,5,6]])
    print(arr2)  # 二维的numpy数组(一般就是二维)
    arr2[0,:] = 0
    print(arr2)
    arr2[1,1] = 1
    print(arr2)
    arr2[arr2 < 3] = 3 # 布尔取值
    print(arr2)
    
    
    # 合并
    arr1 = np.array([[1,2,3],[4,5,6]])  # 可变数据类型
    # print(arr1)
    arr2 = np.array([[7,8,9],[10,11,12]])  # 可变数据类型
    # print(arr2)
    
    print(np.hstack((arr1,arr2)))  # 行合并
    print(np.vstack((arr1,arr2)))  # 列合并
    
    print(np.concatenate((arr1,arr2)))  # 默认列合并
    print(np.concatenate((arr1,arr2),axis=1))  # 1表示行;0表示列
    
    # 通过函数创建numpy数组
    arr1 = np.array([[1,2,3],[4,5,6]])  # 可变数据类型
    # print(arr1)
    
    print(np.zeros((5,5)))
    print(np.ones((5,5)) * 100)
    print(np.eye(5))
    
    print(np.arange(1,10,2)) # 生成一维的  # [1 3 5 7 9]
    print(np.linspace(0,20,10)) # 平均分成10份 # 构造x坐标轴的值
    
    arr = np.zeros((5,5))
    print(arr.reshape((1,25)))
    
    # 数组运算
    arr1 = np.array([[1,2,3],[4,5,6]])  # 可变数据类型
    print(arr1)
    arr2 = np.array([[7,8,9],[10,11,12]])  # 可变数据类型
    print(arr2)
    
    # +-*/ // % **
    print(arr1*arr2)
    print(arr1+arr2)
    
    # 运算函数
    arr1 = np.array([[1,2,3],[4,5,6]])
    print(arr1)
    
    print(np.sin(arr1))
    print(np.cos(arr1))
    
    print(np.sqrt(arr1))
    print(np.exp(arr1))
    
    # 额外补充(了解)
    arr1 = np.array([[1,2,3],[4,5,6]])
    print(arr1)
    arr2 = np.array([[7,8,9],[10,11,12]])
    print(arr2)
    
    print(arr1.T)
    print(arr1.transpose())
    
    # m * n × n * m = m * m
    print(np.dot(arr1,arr2.T))
    
    # 求逆
    arr1 = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
    print(np.linalg.inv(arr1))
    
    
    # numpy的数学方法(了解)
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    print(arr1)
    print(arr1.var())
    print(arr1.std())
    print(arr1.mean())
    
    
    print(arr1.cumsum())  # 累加和
    
    
    # numpy随机数(了解)
    
    print(np.random.rand(3,4))
    
    print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4
    
    print(np.random.choice([1,2,3,4,5],3))
    
    print(arr1)
    np.random.shuffle(arr1)
    print(arr1)
    
    # 随机数种子 # 所有的随机数都是按照随机数种子生成的
    import time
    
    # 重点
    np.random.seed(int(time.time()))
    np.random.seed(1)
    arr1 = np.random.rand(3,4) # 可变数据类型
    print(arr1)
    
    rs = np.random.RandomState(1)
    print(rs.rand(3,4))
    

    2. pandas模块

    # pandas更多的是excel/csv文件处理,excel文件,对numpy+xlrd模块做了一层封装
    
    
    # pandas的数据类型
    
    import pandas as pd
    import  numpy as np
    
    ## Series(现在一般不适应(一维))
    df = pd.Series(np.array([1,2,3,4]))
    print(df)
    
    # DataFrame(多维)
    # DataFrame是一个表格型的数据结构,含有一组有序的列
    
    dates = pd.date_range('20190101',periods=6,freq='M')
    print(dates)
    values = np.random.rand(6,4)*10
    print(values)
    columns = ['c4','c2','c3','c1']
    
    df = pd.DataFrame(values,index=dates,columns=columns)
    print(df)
    
    '''
    dtype  查看数据类型
    index  查看行序列或者索引
    columns    查看各列的标签
    values 查看数据框内的数据,也即不含表头索引的数据
    describe   查看数据每一列的极值,均值,中位数,只可用于数值型数据
    transpose  转置,也可用T来操作
    sort_index 排序,可按行或列index排序输出
    sort_values    按数据值来排序
    '''
    print(df.dtypes)
    print(df.index)
    print(df.columns)
    print(df.describe())
    print(df.T)
    
    df = df.sort_index(axis=1) # 0是行,1是列
    print(df)
    
    
    print(df.sort_values(by='c3'))
    
    # 取值
    print(df['c1'])
    print(df[['c1','c3']])
    print(df.loc['2019-01-31':'2019-02-28'])  # (通过行标签取值)
    
    print(df.values[1,1])
    print(df.iloc[:,:])   # 通过行索引选择数据
    
    print(df['c1']>3)
    
    df.iloc[1,1]=1
    print(df)
    
    # pandas操作表格
    # from io import StringIO
    
    import pandas as pd
    from io import StringIO
    test_data = '''
    5.1,,1.4,0.2
    4.9,3.0,1.4,0.2
    4.7,3.2,,0.2
    7.0,3.2,4.7,1.4
    6.4,3.2,4.5,1.5
    6.9,3.1,4.9,
    ,,,
    '''
    
    test_data = StringIO(test_data)
    
    # 把数据读入内存,变成csv文件
    
    df = pd.read_csv(test_data, header=None)
    df.columns = ['c1', 'c2', 'c3', 'c4']
    print(df)
    
    # 缺失值处理
    df = df.dropna(axis=0)
    print(df)
    
    # 删除行不为4个值的
    df = df.dropna(thresh=3) # 必须得有4个值
    print(df)
    
    # 合并处理
    df1 = pd.DataFrame(np.zeros((2,3)))
    print(df1)
    
    df2 = pd.DataFrame(np.ones((2,3)))
    print(df2)
    
    pd.concat((df1,df2),axis=1) # 默认按列0,1行
    print(pd)
    
    # append只能合并列
    print(df1.append(df2))
    
    # 导入数据
    
    df = df.dropna(thresh=4)
    print(df)
    
    df.index = ['nick','jason','tank']
    print(df)
    

    3. matplotlib模块

    # matplotlib模块: 画图
    # 条形图
    import matplotlib.pyplot as plt # 默认支持英文,不支持中文
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='D:msyh.ttc')
    classes = ['3班','4班','5班','6班']
    students = [50,60,55,67]
    
    ind = range(len(classes))
    # plt.bar(ind,students,color='r')
    # plt.xticks(ind,classes,fontproperties= font)
    # plt.show()
    plt.style.use('ggplot')
    plt.bar(ind,students,color='darkblue')
    plt.xticks(ind,classes,fontproperties= font)
    plt.xlabel('班级',fontproperties=font,fontsize=15)
    plt.ylabel('人数',fontproperties= font,fontsize=15)
    plt.title('班级-人数',fontproperties=font,fontsize=20)
    plt.show()
    
    # 直方图
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import FontProperties
    
    # %matplotlib inline  # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
    font = FontProperties(fname='D:msyh.ttc')
    mu1, mu2, sigma = 50, 100, 10
    x1 = mu1 + sigma * np.random.randn(100000)  # 符合正太分布的随机数据
    x2 = mu2 + sigma * np.random.randn(100000)
    # plt.hist(x1,bins=50)# 每50个数据一根柱子
    # plt.show()
    fig = plt.figure()
    
    ax1 = fig.add_subplot(1, 2, 1)  # 一行2列 第一个
    ax1.hist(x1, bins=50, color='yellow')
    ax1.set_title('黄色的', fontproperties=font)
    
    ax2 = fig.add_subplot(1, 2, 2)  # 一行2列 第二个
    ax2.hist(x2, bins=100, color='green')
    ax2.set_title('绿色的', fontproperties=font)
    
    fig.suptitle('大标题', fontproperties=font, fontsize=20)
    
    plt.show()
    
    # 折线图
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import FontProperties
    # %matplotlib inline  # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
    font = FontProperties(fname='D:msyh.ttc')
    x1 = np.random.randn(1,40).cumsum()
    x2 = np.random.randn(1,40).cumsum()
    x3 = np.random.randn(1,40).cumsum()
    x4 = np.random.randn(1,40).cumsum()
    plt.plot(x1,marker='o',color='r',label='红线',linestyle='--')
    plt.plot(x2,marker='*',color='y',label='黄线',linestyle='-.')
    plt.plot(x3,marker='s',color='green',label='绿色',linestyle=':')
    plt.plot(x4,marker='x',color='b',label='蓝色',linestyle='-')
    
    
    plt.legend(prop=font)  # label的字体的需要在这里换
    plt.show()
    
    # 散点图+直线图
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import FontProperties
    # %matplotlib inline  # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
    font = FontProperties(fname='D:msyh.ttc')
    x1 = np.arange(1,20,2)
    x1
    y = x1**2
    plt.scatter(x1,y,s=100)
    plt.show()
    
    
  • 相关阅读:
    D. The Fair Nut and the Best Path 树形dp (终于会了)
    (二)网络流之最大流
    网络流(知识点) 一 终究还是躲不掉
    dp 优化 F2. Pictures with Kittens (hard version)
    da shu mo ban
    AtCoder Regular Contest 090 F
    Codeforces 918D MADMAX 图上dp 组合游戏
    Codeforces 918C The Monster
    AtCoder Regular Contest 090 C D E F
    poj 3623 Best Cow Line, Gold 后缀数组 + 贪心
  • 原文地址:https://www.cnblogs.com/yushan1/p/11382897.html
Copyright © 2011-2022 走看看