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一般是用列表来创建数组。

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

numpy库的使用_第1张图片

 这就是一个一维数组了。

……

……

五;创建二维数组

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

比如:

numpy库的使用_第2张图片

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

 

……

……

六;数组类型

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

numpy库的使用_第3张图片

 

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

dtype可以设置以下的类型:

numpy库的使用_第4张图片

 

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

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

比如:

numpy库的使用_第5张图片

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

……

……

七;查看数组信息

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

numpy库的使用_第6张图片

 

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

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

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

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

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

……

……

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

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

比如:

numpy库的使用_第7张图片

 

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

……

……

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

比如:

numpy库的使用_第8张图片

 

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

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

……

……

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

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

numpy库的使用_第9张图片

 ……

……

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

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

numpy库的使用_第10张图片

 ……

……

十二;arange()函数

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

 numpy库的使用_第11张图片

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

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

……

……

十三;linspace()函数

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

numpy库的使用_第12张图片

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

……

……

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

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

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

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

numpy库的使用_第13张图片

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

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

numpy库的使用_第14张图片

 ……

……

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

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

numpy库的使用_第15张图片

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

……

……

十六;截取数组

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

numpy库的使用_第16张图片

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

……

……

十七;复制数组

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

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

如下:

numpy库的使用_第17张图片

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

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

试一试:

numpy库的使用_第18张图片

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

……

……

十八;遍历数组

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

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

比如:

numpy库的使用_第19张图片

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

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

比如:

numpy库的使用_第20张图片

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

……

……

十九;条件运算

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

numpy库的使用_第21张图片

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

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

numpy库的使用_第22张图片

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

……

……

二十;统计运算的函数

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

numpy库的使用_第23张图片

 举例子:

numpy库的使用_第24张图片

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

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

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

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

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

……

……

你可能感兴趣的:(机器学习,numpy,python)