伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

玩数据必备Python库:Numpy使用详解

来源:本站原创 浏览:85次 时间:2022-04-24

Numpy提供的主要功能具体如下:


  • ndarray——一个具有向量算术运算和复杂广播能力的多维数组对象。

  • 用于对数组数据进行快速运算的标准数学函数。

  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。

  • 非常有用的线性代数,傅里叶变换和随机数操作。

  • 用于集成C /C++和Fortran代码的工具。


除了明显的科学计算用途之外,Numpy还可以用作通用数据的高效多维容器,定义任意的数据类型。这些都使得Numpy能够无缝、快速地与各种数据库集成。


提示:这里提到的“广播”可以这么理解:当两个维度不同的数组(array)运算的时候,可以将低维的数组复制成高维数组参与运算(因为Numpy运算的时候需要结构相同)。


在学习图像识别的过程中,需要将图片转换为矩阵。即将对图片的处理简化为向量空间中的向量运算。基于向量运算,我们就可以实现图像的识别。



01 创建数组


现在就来关注下Numpy中的一些核心知识点。在Numpy中,最核心的数据结构是ndarray, ndarray代表的是多维数组,数组指的是数据的集合。为了方便理解,我们下面列举一个小例子。


一个班级里学生的学号可以通过一维数组来表示,数组名为a,数组a中存储的是数值类型的数据,分别是1,2,3,4。


索引

学号

0

1

1

2

2

3

3

4


其中,a[0]代表的是第一个学生的学号1,a[1]代表的是第二个学生的学号2,以此类推。


一个班级里学生的学号和姓名,可以用二维数组来表示,数组名为b。


1

Tim

2

Joey

3

Johnny

4

Frank


类似的,其中b[0,0]代表的就是1(学号),b[0,1]代表的就是Tim(学号为1的学生的名字),以此类推b[1,0]代表的是2(学号)等。


借用线性代数的说法,一维数组通常称为向量(vector),二维数组通常称为矩阵(matrix)。


当我们安装完Anaconda之后,默认情况下Numpy已经在库中了,所以不需要额外安装。下面我们来写一些语句简单测试下Numpy库。


1)在Anaconda的Notebook里输入


import numpy as np


之后,通过键盘按住Shift+Enter执行,如果没有报错,则说明Numpy已被正常引入,如图2-7所示。


▲图2-7 在Notebook中引入Numpy


稍微解释下这条语句:通过import关键字将Numpy库引入,然后通过as为其取一个别名np,别名的作用是为了便于后续引用。


2)Numpy中的array()可以直接导入向量,代码如下:


vector = np.array([1,2,3,4])


3)numpy.array()方法也可以导入矩阵,代码如下:


matrix = np.array([[1,'Tim'],[2,'Joey'],[3,'Johnny'],[4,'Frank']])



02 创建Numpy数组


我们可以通过创建Python列表(list)的方式来创建Numpy矩阵,比如输入


nparray = np.array([i for i in range(10)])


可以看到返回的结果是


array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


同样,也可以通过Python列表的方式来修改值,比如输入


nparray[0] = 10


再来观察nparray的向量内容就会发现返回的结果是


array([ 10, 1, 2, 3, 4, 5, 6, 7, 8, 9])


Numpy数组还封装了其他方法来创建矩阵。首先,我们介绍第一个方法np.zeros(从命名规则来看,这个方法就是用来创建数值都为0的向量),比如,我们输入:


a = np.zeros(10)


可以看到结果为:


array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])


从上述结果可以看出,每一个0后面都有一个小数点,调用a.dtype会发现我们创建的这个向量的类型为dtype(‘float64’)。值得注意的是:在大部分图像识别算法开发中,我们使用的都是float64这个类型。如果希望在创建Numpy矩阵的时候强制规定一种类型,那么我们可以使用以下代码:


np.zeros(10,dtype=int)


这样,返回的结果在矩阵中的数据就都是整型0了。介绍完使用zeros方法创建向量之后,再来看看如何创建一个多维矩阵。我们可以使用传入元组的方式,代码如下:


np.zeros(shape=(3,4)) #代表创建的是三行四列的矩阵并且其数据类型为float64


返回的结果为:


array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])


与np.zeros方法相似的还有np.ones方法,顾名思义,np.ones方法创建的矩阵的数值都为1。我们来举个例子:


np.ones((3,4))


返回的结果如下:


array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])


读者可能会比较好奇,既然我们可以创建数值全为0的矩阵,也可以创建数值全为1的矩阵,那么Numpy是否提供了一个方法可以让我们自己指定值呢?答案是肯定的,这个方法就是np.full方法,我们来看一个例子,代码如下:


np.full((3,5),121) #这个方法的意思是我们创建了一个三行五列的矩阵,默认值为121


返回的结果是:


array([[121, 121, 121, 121, 121],
       [121, 121, 121, 121, 121],
       [121, 121, 121, 121, 121]])


我们也可以使用np.arange方法来创建Numpy的矩阵。示例代码如下:


np.arange(0,20,2) #arange接收三个参数,与Python中的range方法相似,arange也是前闭后开的方法,第一个参数为向量的第一个值0,第二个参数为最后一个值20,因为是后开所以取的是18,第三个参数为步长,默认为1,本例中设置为2,所以最后一个值是18。


返回的结果是:


array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])


我们可以使用np.linspace方法(前闭后闭)来对Numpy矩阵进行等分,比如将0~10等分为5份的代码如下:


np.linspace(0,10,5)


返回的结果是:


array([  0. ,   2.5,   5. ,   7.5,  10. ])


下面通过几个例子再来看看在Numpy矩阵中如何生成随机数矩阵。


1)生成一个长度为10的向量,里面每一个数值都是介于0~10之间的整数,代码如下:


import numpy as np
np.random.randint(0,10,10)


2)如果不确定每个参数代表的意思,则加上参数名size,代码如下:


np.random.randint(0,5,size=5)  #注意是前闭后开,永远取不到5


3)我们也可以生成一个三行五列的整数矩阵,代码如下


np.random.randint(4,9,size=(3,5))


  • 上一篇: 让AI学习AI:自动化机器学习的概述、发展和研究意义
  • 下一篇: 谈论AI之前,你搞懂人类了吗?(颠覆认知)
  •   推荐站点

    • At-lib分类目录At-lib分类目录

      At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

      www.at-lib.cn
    • 中国链接目录中国链接目录

      中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

      www.cnlink.org
    • 35目录网35目录网

      35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

      www.35mulu.com
    • 就要爱网站目录就要爱网站目录

      就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

      www.912219.com
    • 伍佰目录伍佰目录

      伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

      www.wbwb.net