机器学习系列(二)——Numpy模块基本操作

作者: Ice_spring | 来源:发表于2019-06-06 23:30 被阅读0次

    工欲善其事,必先利其器,在正式进入机器学习算法学习之前,先学习一下常用模块的基本操作。

    Numpy.array与python list

    导入numpy,查看版本

    import numpy as np
    np.__version__
    #out:'1.15.4'
    

    为什么使用numpy进行数据操作呢,首先看python list和numpy操作数据的不同:

    L=[i for i in range(10)]
    L
    #out:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    python的list非常灵活,元素可以是不同类型,但这也限制了list的性能,每次创建还要进行类型检查。

    L[3]='liangliang'
    L
    #out:[0, 1, 2, 'liangliang', 4, 5, 6, 7, 8, 9]
    

    当然python原生也有限制类型的数组结构,python自带的array模块

    import array
    ar=array.array("i",[i for i in range(10)])
    ar
    #out:array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    

    此时试图修改某元素为其它类型会出现报错。但是,它只是将数据看作数组,无法将数据看成向量和矩阵进行运算。


    于是更强大的Numpy.array应运而生。

    nparr=np.array([i for i in range(10)])
    nparr
    #out:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    nparr.dtype#查看数据类型
    #out:dtype('int64')
    nparr[3]=3.144
    nparr
    #out:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    

    创建numpy.array的方法

    zeros,ones

    zeros,ones等。默认为浮点型数据

    l=np.zeros(10)
    l
    #out:array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
    l.dtype
    #out:dtype('float64')
    

    若要创建全0整数,则指定dtype
    l=np.zeros(10,dtype=int)
    其实第一个参数是大小,可以传入创建矩阵
    l=np.zeros(shape=(3,4))

    #out:array([[0., 0., 0., 0.],
           [0., 0., 0., 0.],
           [0., 0., 0., 0.]])
    

    若用full,则生成指定数值向量或矩阵,dtype依据fill_value而确定。
    l=np.full(shape=(3,4),fill_value=10)

    #out:array([[10, 10, 10, 10],
           [10, 10, 10, 10],
           [10, 10, 10, 10]])
    

    注:当显式写出参数名,可以调换各个参数位置。

    arange

    下面以2为步长,生成0到20直间数组,range是不包含终端点的。

    l=[i for i in range(0,20,2)]#python中
    print('l:',l)
    m=np.arange(0,20,2)
    print('m:',m)
    #out:
        l: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
        m: [ 0  2  4  6  8 10 12 14 16 18]
    

    不同是range中步长不可以是浮点数,而numpy.arange可以是浮点步长,不指定步长则默认为1。

    linspace

    在0到20之间等长截11个点,是包含首尾端点的

    p=np.linspace(0,20,11)
    p
    #out:array([ 0.,  2.,  4.,  6.,  8., 10., 12., 14., 16., 18., 20.])
    

    random

    生成(0,10)之间一个随机的整数,这种方法不包括终端点

    np.random.randint(0,10)
    #out:6
    

    生成(0,10)之间的向量

    np.random.randint(0,10,size=7)
    #out:array([0, 3, 1, 8, 2, 9, 9])
    

    size可以指定生成矩阵

    np.random.randint(0,10,size=(2,2))
    #out:
        array([[9, 3],
               [9, 0]])
    

    设置随机种子可以保证生成的随机数一样,因为计算机中的随机数实际是伪随机数,是随机数生成算法生成的,于是可以设置随机种子。

    np.random.seed(2)
    np.random.randint(0,10,size=11)
    #out:array([8, 8, 6, 2, 8, 7, 2, 1, 5, 4, 4])
    
    np.random.seed(2)
    np.random.randint(0,10,size=11)
    #out:array([8, 8, 6, 2, 8, 7, 2, 1, 5, 4, 4])
    

    这两次随机生成是一样的。
    生成(0,1)之间随机数

    np.random.random()
    #out:0.35273532
    

    当然可以指定生成向量或矩阵

    np.random.random(size=7)
    #out:array([0.13457995, 0.51357812, 0.18443987, 0.78533515, 0.85397529, 0.49423684, 0.84656149])
    

    生成标准正太分布随机数

    np.random.normal(size=(2,2))
    #out:
    array([[-0.63765501, -1.18761229],
           [-1.42121723, -0.1534952 ]])
    

    指定均值方差

    np.random.normal(0,2,size=(2,2))
    #out:
    array([[-0.53811392,  4.46273358],
           [-4.86953515,  0.22545301]])
    

    要学会查阅文档,这是一项非常有用的技能。如果对一些模块或者函数参数不清楚,可以翻阅文档进行查询:
    np.random.normal?这种方式会调出窗口显示文档
    //或
    help(np.random.normal)这种方式会直接在notebook中打印文档
    这是一种非常标准的学习框架的方式。


    有小伙伴问我指定矩阵或向量维度时什么时候用参数shape,什么时候用size,这个好像随机生成用size,其余情况用shape(不一定对)。
    及其学

    相关文章

      网友评论

        本文标题:机器学习系列(二)——Numpy模块基本操作

        本文链接:https://www.haomeiwen.com/subject/lfrpxctx.html