• numpy库的使用


    numpy库的使用

    ……

    目录:

    一;介绍

    二;创建ndarray

    三;导入库

    四;创建一维数组

    五;创建二维数组

    六;数组类型

    七;查看数组信息

    八;reshape()函数调整数组大小

    九;empty()函数创建空数组

    十;zeros()函数创建全0数组

    十一;ones()函数创建全1数组

    十二;arange()函数

    十三;linspace()函数

    十四;random模块创建随机数组

    十五;其它类型转成ndarray类型

    十六;截取数组

    十七;复制数组

    十八;遍历数组

    十九;条件运算

    二十;统计运算的函数

    ……

    一;介绍

    numpy库是机器学习里面十分常用的一个库,支持各种数组、矩阵运算。

    numpy的强大功能主要基于底层的一个ndarray结构,可以生成N维数组对象。

    ndarray内部构成如下:

    1;数组形状shape:一个表示数组各维大小的整数元祖。

    2;数组数据data:一个指向内存中数据的指针。

    3;数据类型dtype:一个描述数组的类型对象。

    4;跨度strides:一个元祖,表示当前维度移动到下一个位置需要跨越的字节数。

    5;数组顺序order:访问数组元素的主顺序,如’C’为行主序,’F’为列主序等。

    ……

    ……

    二;创建ndarray

    用array函数:

    numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)

    array函数中的参数各有不同的作用,可以定义出不同的数组。

    1;object:数组或嵌套的数列

    2;dtype:数组元素的数据类型,可自己定义

    3;copy:对象是否需要复制,可定义

    4;order:创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)

    5;subok:默认返回一个与基类类型一致的数组

    6;ndmin:指定生成数组的最小维度

    ……

    ……

    三;导入库

    import numpy as np

    ……

    ……

    四;创建一维数组

    python一般是用列表来创建数组。

    所以可以用列表来创建一个一维数组。

     这就是一个一维数组了。

    ……

    ……

    五;创建二维数组

    二维数组同样用的最多的是列表,但需要在列表中包含列表,这样就可以实现二维数组了。

    比如:

     除了一维和二维,还可以创造三维数组,即列表中包含包含列表的列表,不过不是很常用。

     

    ……

    ……

    六;数组类型

    可以用dtype给数组设定不同的类型,比如:

     

    通过上面的代码,就将dtype设置为了64位的float类型。

    dtype可以设置以下的类型:

     

    在上面的表中,类型后面的数字8,16,32,64等,其实可以理解数组中的每一个元素必须在2^8,2^16,2^32,2^64这样的一个限定范围内。

    而int和uint则是有符号和无符号的区别,其实说白了,int型会出现负数,而uint只有正数,上面表中就可以看到,int的范围类型都是在负数到正数之间,而uint则是大于等于0。当然,如果在uint中输入负值也没错,它会自动帮你转成在范围之内的正值。

    比如:

     -1就被转成了255。而255其实等于2^8-1,正好是uint8范围内的最后一位数。

    ……

    ……

    七;查看数组信息

    有时需要查看数据的一个信息怎么办,可以这样:

     

    shape会输出这是一个n*m的矩阵。(n是行,m是列)。

    data会输出数据的储存位置。

    size会输出数组的大小,比如上面的数组中有9个元素,则输出9。

    ndim会输出数据的维度,比如上面就是一个2维数组。

    type()会输出数据的类型,可以看到,这是一个numpy.ndarray类型。

    ……

    ……

    八;reshape()函数调整数组大小

    用reshape()函数,可以调整数组大小,让一个2*3的数组变成3*2的数组。

    比如:

     

    可以看到,输出值上面是一个2*3的数组,而下面则变成了3*2的数组。

    ……

    ……

    九;empty()函数创建空数组

    比如:

     

    可以看到,用empty创建了一个2*4的空数组(注意:[2,4]这个参数和之前array()函数中不同,这里指的是创建一个2*4的空数组)。

    dtype=np.int8,表示创建一个整数的空数组,而数组中的数字全部都会是在0~2^8-1范围内随机的未初始化的整数。

    ……

    ……

    十;zeros()函数创建全0数组

    zeros()函数其实和empty()函数差不多,区别在于zeros()创建出来的数组中的每个元素都是0。

     ……

    ……

    十一;ones()函数创建全1数组

    ones()函数和zeros()函数差不多,只不过数组中每个元素都是1而已。

     ……

    ……

    十二;arange()函数

    arange()和python的内置函数range()几乎一样。

     

     比如这样一段代码,用arange()函数生成了0到9的一个列表。

    当然,后面我还用了reshape()函数调整为了一个2*5的数组,用起来也很是方便。

    ……

    ……

    十三;linspace()函数

    linspace()函数和arange()函数其实差不多,区别在于linspace对于细微的取值更加方便。

     我设置的参数有三个,0,6和12。这表示要在0和6之间输出12个等间隔的数组成的列表,所以这个时候就不需要像arange()函数一样考虑步长,而只要考虑你需要在这个区间范围内取多少个值就行了。

    ……

    ……

    十四;random模块创建随机数组

    numpy库在子模块random中提供了随机数函数。

    常见的随机数函数有randint、rand。(这两个函数的作用各不相同)

    比如我要创建一个随机数在1~10之间的4*4的数组,可以用randint创建,有以下代码:

     可以看到,数组中的每一个元素,都是1~10之间的随机数。(可以等于1,但不等于10)

    再比如rand()函数,在rand()函数参数中写上2*3,便会产生一个2*3的数组,数组中的每一位元素都是0.0~1.0之间的随机数,如下:

     ……

    ……

    十五;其它类型转成ndarray类型

    可以直接用array()函数进行转化,比如:

     在上面中,将a用array()函数转化后,原本是list类型就变成了numpy.ndarray类型。而且从下面可以看到,这两个类型的输出格式是不一样的。

    ……

    ……

    十六;截取数组

    可以用类似切片的方法,从一个数组中截取部分数组。比如我从一个4*4的数组中,截取出一个2*3的数组。

     这样就成功的截取出了4*4数组中的一部分,可以通过调整参数,任意进行截取其中的部分数组。

    ……

    ……

    十七;复制数组

    一共有三种方法可以复制数组。

    一种是进行切片的方式复制,第二种是利用copy()函数复制。

    如下:

     a1和a2分别代表两种复制方法,都可以得到和原来一模一样的数组。

    那可不可以直接用等号进行复制数组呢?

    试一试:

     可以看到,a和a3的输出结果是一样的,可当我想要改变a3中[0][0]这个位置的值的时候,却连a的值也一起改变了,这说明用a和a3根本就是同一个东西,只不过a3相当于是a的别名,但它们所代表的都是同一个东西。而这并不是复制,只是给数组a取了个别名而已,所以称不上是复制。

    ……

    ……

    十八;遍历数组

    如果是二维数组的话,可以用双重for循环进行遍历。

    最外围的是对行进行循环,最里面的是对列进行循环。

    比如:

     这样一个双重for循环,就可以输出数组中的每一个元素的值了。用双重for循环可以很方便的对元素中的每一个值进行操作。

    其实不使用双重for循环也可以,numpy里面有一个nditer()函数可以对数组进行遍历。

    比如:

     用nditer()函数也可以做到对数组的遍历。不过用nditer()函数输出有一个缺点,那就是把数组进行转置过后,仍然会输出同样的值,也就是顺序不变。所以还是用双重for循环更加保险一点,不容易出错。

    ……

    ……

    十九;条件运算

    条件运算也很有用,比如这样:

     进行一个条件判断,就可以输出一个判断条件是否满足的这样一个数组,不满足的元素是False,而满足的元素是True,一眼看过去就很清晰明了。

    当然,我还可以进行其它操作,比如这样:

     所有>=3的元素都变成了10,所有<3的元素则变成了0。

    ……

    ……

    二十;统计运算的函数

    numpy中有多个关于统计运算的函数,如下:

     举例子:

     比如这样一个程序,输出的第一个result是5,而5是这个数组的最大值,这个没问题。

    而5后面的两行输出的是什么呢?

    当axis=0时,表示输出每一列中的最大值。首先是第一列,0和3输出了3,第二列10和4输出了10,而第三列2和5输出了5,所以共同组成了[3,10,5]进行输出。

    而axis=1时,表示输出每一行中的最大值。

    其它统计运算的函数也和max()函数类似。

    ……

    ……

  • 相关阅读:
    Day 54 多线程
    112二二位
    【Java基础】面向对象进阶
    Nacos Config
    MySQL——增删改查进阶
    Shell笔记(超级完整)
    求教Jquery的Ajax事件
    SpringCloud - Sentinel熔断与限流
    iOS查看汇编代码
    软件工程师必读的13本书
  • 原文地址:https://blog.csdn.net/oyqho/article/details/127819811