zoukankan      html  css  js  c++  java
  • Python数据分析-Numpy数值计算

    Numpy介绍:

    NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。

    NumPy的主要功能:
      1)ndarray,一个多维数组结构,高效且节省空间
      2)无需循环对整组数据进行快速运算的数学函数
      3)读写磁盘数据的工具以及用于操作内存映射文件的工具
      4)线性代数、随机数生成和傅里叶变换功能
      5)用于集成C、C++等代码的工具

    pyhton里面安装、引入方式:
      安装方法:pip install numpy
      引用方式:import numpy as np

     创建数组:

    a=[1,2,3,4]
    b=np.array(a)
    
    print(b,type(b))  #[1 2 3 4] <class 'numpy.ndarray'>

    数组属性:

    #数组个数
    print(b.size)       #4
    #数组形状
    print(b.shape)      #(4,)
    #每个元素占用你的字节数
    print(b.itemsize)   #4
    #维数
    print(b.ndim)       #1

    arange定义一个数组,限定步长:

    np.arange() 参数为初始值、结束值(不包含、步长
    array_arange=np.arange(10,30,5)
    print(array_arange)  #[10 15 20 25]

    linspace定义一个数组,限定数组元素的个数:

    np.linspace() 数为初始值、结束值(包含、元素的个数,
    array_linspace=np.linspace(0,2,9)    #结果第一位是0   中间数值平均分配  结束为2
    print(array_linspace)  #[0.   0.25 0.5  0.75 1.   1.25 1.5  1.75 2.  ]

    快速创建N维数组:

    ones,创建10行10列的数值为浮点1的矩阵

    array_one=np.ones((5,5),dtype=int)  #dtype=int 可以设置类型
    print(array_one)

    zeros,创建10行10列的数值为浮点0的矩阵

    array_zero=np.zeros((2,5,5))        #array_zero=np.zeros((2,5,5)) 2:表示创建2个5行5列的数组
    print(array_zero)

    创建自定义数值的数组:

    full,创建3*3 数值为5的数组

    full_array=np.full((3,3),5)
    print(full_array)

    eye,用来构造单位矩阵(默认情况下输出的是对角线全“1”,其余全“0”的方阵

    eye_array=np.eye(3)
    print(eye_array)
    
    '''结果
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    
    '''

    empty,生成未初始化的随机值

    empty_array=np.empty((2,4))
    print(empty_array)
    
    '''结果为
    [[6.23042183e-307 1.42417221e-306 1.37961641e-306 6.23039015e-307]
     [6.23053954e-307 1.78020169e-306 1.78021527e-306 3.91786943e-317]]
    
    ''' 

    random生成随机数组数值

    random.rand(),2*2 (范围是0-1)

    array_random=np.random.rand(2,2)
    print(array_random)

    random.uniform(),随机生成指定范围内的一个数(小数)

    array_uniform=np.random.uniform(0,5)
    print(array_uniform)  #0.6259318369377503

     random.randint(),随机生成指定范围内的一个数(整数不包含2)

    array_randint=np.random.randint(0,2)
    print(array_randint) #1

    正太分布
    给定均值/标准差/维度的正态分布np.random.normal(1.75, 0.1, (2, 3))

    #正态生成4行5列的二维数组
    arr=np.random.normal(1.75,0.1,(4,5))
    print(arr)
    
    #截取第1至2行的第2至3列(从第0行算起)
    after_arr=arr[1:3,2:4]   #【参数1,参数2】 参数1取的行   参数2取的是范围
    print(after_arr)  #
    
    '''结果
    [[1.7121083  1.79442264 1.88480996 1.74680449 1.94296451]
     [1.75145398 1.84717094 1.61700579 1.79300659 1.65306822]
     [1.84915626 1.82844994 1.42992838 1.74578747 1.81638628]
     [1.78611223 1.79935389 1.71098421 1.7065452  1.93011894]]
     
    [[1.61700579 1.79300659]
     [1.42992838 1.74578747]]
    '''

    reshape,改变数组形状(注意:要求前后元素个数匹配)

    one_20 = np.ones([20])
    print("-->1行20列<--")
    print(one_20)
    
    #将上面的一维数组变为下面的二维
    
    one_4_5 = one_20.reshape([4,5])
    print("将形状分为-->4行5列<--")
    print(one_4_5)

    where,条件运算

    stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    print(stus_score)
    #比较并替换运算
    res=np.where(stus_score<80,0,90)  #(如果数值小于80,替换为0,如果大于80,替换为90)
    print(res)

    统计运算

    指定轴最大值amax(求每一行和列的最大值)

    # 指定轴最大值amax(求每一行和列的最大值)
    stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    print(stus_score)
    
    result_amax=np.amax(stus_score,axis=0)  #axis=0/1; 0表示列 1表示行
    print('每一列的最大值:',result_amax)  #[86 88]
    
    result_amax2=np.amax(stus_score,axis=1)
    print('每一行的最大值:',result_amax2)   #[88 82 84 86 81]

    指定轴最小值amin(求每一行和列的最小值)

    #指定轴最小值amin(求每一行和列的最小值)
    stus_score=np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    print(stus_score)
    result_amin=np.amin(stus_score,axis=0)
    print('每一列的最小值:',result_amin)
    
    result_amin2=np.amin(stus_score,axis=1)   #[75 75]
    print('每一列的最小值:',result_amin2)   #[80 81 75 83 75]

    mean,求平均值

    stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    
    # 求每一行的平均值(0表示列)
    print("每一列的平均值:")
    result = np.mean(stus_score, axis=0)
    print(result)  #[81.4 81.6]
    
    # 求每一行的平均值(1表示行)
    print("每一行的平均值:")
    result = np.mean(stus_score, axis=1)
    print(result)  #[84.  81.5 79.5 84.5 78. ]

    std,求方差

    stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    
    # 求每一行的方差(0表示列)
    print("每一列的方差:")
    result = np.std(stus_score, axis=0)
    print(result)
    
    # 求每一行的方差(1表示行)
    print("每一行的方差:")
    result = np.std(stus_score, axis=1)
    print(result)

    数组运算

    数组与数的运算

    加法运算

    #数组与数的运算(加法)
    stus_score=np.array(([80, 88], [82, 81], [84, 75], [86, 83], [75, 81]))
    print(stus_score)
    print(stus_score[:,0])  #[80 82 84 86 75] 打印第一列的值
    #实现行和列的值都加5
    stus_score[:,0] = stus_score[:,0]+5 #每一列值加5
    stus_score[:,1] = stus_score[:,1]+5 #每一行值加5
    print(stus_score)

    乘法运算

    #数组与数的运算(乘法)
    stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    print("减半前:")
    print(stus_score)
    #实现行和列的值都减一半
    stus_score[:, 0] = stus_score[:, 0]*0.5 #每一列乘0.5
    stus_score[:, 0] = stus_score[:, 1]*0.5 #每一行乘0.5
    print("减半后:")
    print(stus_score)

    数组与数组之间运算加减乘除运算(基本用的不多)

    a=np.array([1,2,3])
    b=np.array([10,20,30])
    
    c=a+b
    d=a-b
    e=a*b
    f=a/b
    print(c)   #[11 22 33]
    print(d)    #[ -9 -18 -27]
    print(e)    #[10 40 90]
    print(f)    #[0.1 0.1 0.1]

    矩阵运算

    场景:假设下面每个列表代表每个学生成绩,例如,张三 平时成绩80、期末成绩88,计算每个人总成绩是多少?
    stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    
    #根据,平时成绩占40% 期末成绩占60%, 计算结果
    q=np.array([[0.4],[0.6]])
    result=np.dot(stus_score,q)
    print(result)
    
    '''结果
    E:python36python3.exe C:/Python数据分析/numpy模块.py
    [[84.8]
     [81.4]
     [78.6]
     [84.2]
     [78.6]]
    '''

    vstack矩阵垂直拼接

    #vstack矩阵垂直拼接
    v1=[[0,1,2,3,4,5,],
        [6,7,8,9,10,11]]
    
    v2=[[12, 13, 14, 15, 16, 17],
        [18, 19, 20, 21, 22, 23]]
    
    result=np.vstack((v1,v2))
    print('v1与v2垂直拼接结果为:',result)
    '''结果
    [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]
     [12 13 14 15 16 17]
     [18 19 20 21 22 23]]
    
    '''

    hstack矩阵水平拼接

    #hstack矩阵水平拼接
    v1=[[0,1,2,3,4,5,],
        [6,7,8,9,10,11]]
    
    v2=[[12, 13, 14, 15, 16, 17],
        [18, 19, 20, 21, 22, 23]]
    result=np.hstack((v1,v2))
    print('v1与v2水平拼接结果为:',result)
    '''结果
    [[ 0  1  2  3  4  5 12 13 14 15 16 17]
     [ 6  7  8  9 10 11 18 19 20 21 22 23]]

    练习题目:

    题目1:对一个二维数组,选出其第一列和第二列,组成新的二维数组。

    res=np.array(([1,2,3],[4,5,6],[7,8,9]))
    print(res)
    print(res[:,[1,2]])  #思路第一个参数时表示去所有行,近一步然后取第1,2列
    '''结果为
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    [[2 3]
     [5 6]
     [8 9]]
    
    '''

    题目2:对于一个数组,选出其第1,3,4,6,7个元素,组成新的二维数组。

    res=np.array([1,2,3,4,5,6,7,8,9])
    print(res[[1,3,4,6,7]])
  • 相关阅读:
    转载 Android Permission中英对照
    常用vi命令——鸟哥的私房菜
    转载 Android拍照、录像、录音代码范例
    转载 Android ListView滚动提示等待框
    Android ViewFlipper装载baseAdapter
    转载 Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget
    转载 Android解决通过Intent调用系统拍照程序,返回图片太小的问题
    垂直输出字符串数组
    Yahoo!网站性能最佳体验的34条黄金守则__JavaScript和CSS
    将16进制转换成10进制
  • 原文地址:https://www.cnblogs.com/yangzhizong/p/10069364.html
Copyright © 2011-2022 走看看