景安微信
网站有问题
老雷来帮忙
景安网络 欢迎来到景安网络虚拟主机资讯站!
免费主机国内主机
国内主机
0元购买
原价99元/年 我想领取
QQ群
快云体验交流群

群名称:快云体验群

群   号:288544772

一键加群 快云体验交流群
公众号
快云官方微信

扫码关注公众号您可以:

1、微信一键登录会员;

2、微信提交故障工单;

3、微信查询网站备案。

回顶部
虚拟主机

首页 > 网络教程 > 高能!8段代码演示Numpy数据运算的神操作

高能!8段代码演示Numpy数据运算的神操作

来源:未知

作者:hanlei

更新时间:2019-08-01 11:12

景安网络—专业的数据中心服务商!提供快云服务器,快云VPS,虚拟主机,域名注册,服务器托管,服务器租用,SSL证书,数据库存储。 2019快云上云特惠季 立即注册

Numpy是Numerical Python extensions 的缩写,字面意思是Python数值计算扩展。Numpy是Python中众多机器学习库的依赖,这些库通过Numpy实现基本的矩阵计算,Python的OpenCV库自然也不例外。
Numpy支持高阶、大量计算的矩阵、向量计算,与此同时提供了较为丰富的函数。Numpy采用友好的BSD许可协议开放源代码。它是一个跨平台的科学计算库,提供了与Matlab相似的功能和操作方法。
虽然科学计算领域一直是Matlab的天下,但是Numpy基于更加现代化的编程语言——Python。而且Python凭借着开源、免费、灵活性、简单易学、工程特性好等特点风靡技术圈,已经成为机器学习、数据分析等领域的主流编程语言。
虽然Matlab提供的包非常多,但是Python因其简单灵活、扩展性强等特点,也诞生了一系列优秀的库。例如Scipy具有大多数Matlab所具备的功能,Matplotlib能够简便地进行数据可视化。虽然当前Matlab的地位仍然难以撼动,但是,随着时间的推移,Python在科学计算上的生态系统也会越来越丰富。
安装Numpy的方法也很简单,使用Python的包管理工具pip或者anaconda便可以实现。例如在shell中输入下列命令行便可以通过pip安装Numpy:
另外,Numpy是OpenCV的一个依赖库,所以,我们使用pip工具安装好OpenCV库之后,Numpy一般也都已经安装好了。

01 array类型


Numpy的array类型是该库的一个基本数据类型,这个数据类型从字面上看是数组的意思,也就意味着它最关键的属性是元素与维度,我们可以这个数据类型来实现多维数组。
因此,通过这个数据类型,我们可以使用一维数组用来表示向量,二维数组来表示矩阵,以此类推用以表示更高维度的张量。
我们通过下面的例子来简单体会一下在Numpy中array类型的使用。

1.Numpy中array类型的基本使用

通过上面的代码片段,我们可以了解Numpy中array类型的基本使用方法。我们可以看到,array其实是一个类,通过传入一个list参数来实例化为一个对象,也就实现了对数据的封装。这个对象中包含对各个元素进行计算的基本方法,例如求平均值、求最大值等。除此之外,我们再看一下关于更高维度数据的处理。

2.Numpy对更高维度数据的处理

除此之外,Numpy还包含了创建特殊类别的array类型的方法,例如。

3.Numpy创建特殊类别的array类型

Numpy作为Python的一款著名数值计算库,其在基础计算上的功能也是非常完备的,代码如下。

4.Numpy基础计算演示

除此之外,Numpy所包含的基本计算功能还有很多,例如将array切分、拼接、倒序等。

02 线性代数相关


我们在前面介绍了array类型及其基本操作方法,了解到使用array类型可以表示向量、矩阵和多维张量。线性代数计算在科学计算领域非常重要,在机器学习和数据挖掘领域,线性代数相关函数的使用也是非常频繁的。下面,我们介绍一下Numpy为我们提供的线性代数操作。

5.Numpy提供的线性代数操作

 

03 矩阵的高级函数


我们在前面学习了Numpy的基本数据类型array,同时了解了一些基本的数学运算方法。其实除了前面我们所提到的对矩阵求逆、求秩、求转置等基本运算之外,Numpy还为我们提供了矩阵的分解等更高级的函数。
矩阵分解(decomposition, factorization)是将矩阵拆解为若干个矩阵的相乘的过程。在数值分析,常常被用来实现一些矩阵运算的快速算法,在机器学习领域有非常重要的作用。
例如我们在前面介绍过线性降维的PCA算法,其中就涉及矩阵分解的步骤。今日头条、亚马逊网上商城这类互联网产品,总会根据我们的个人喜好给我们推送一些它认为我们会感兴趣的资讯或商品,这类用于推送消息的系统称为推荐系统(Recommendation System)。
在推荐系统的实现过程中,就用到了矩阵分解算法。例如主流的开源大数据计算引擎Spark在ml机器学习库中通过ALS算法实现了推荐系统,也有的推荐系统采用SVD算法来实现整套系统中的矩阵分解过程。
在Numpy中,为我们提供了基于SVD算法的矩阵分解,SVD算法即为奇异值分解法,相对于矩阵的特征值分解法,它可以对非方阵形式的矩阵进行分解,将一个矩阵A分解为如下形式:
A = U∑VT
式中,A代表需要被分解的矩阵,设其维度是m×n。U矩阵是被分解为的三个矩阵之一,它是一个m×m的方阵,构成这个矩阵的向量是正交的,被称为左奇异向量;∑是一个m×n的向量,它的特点是除了对角线中的元素外,其余元素都为0。V是一个n×n的方阵,它的转置也是一个方阵,与U矩阵类似,构成这个矩阵的向量也是正交的,被称为右奇异向量。整个奇异值分解算法矩阵的形式如图4-1所示,具体算法实现在此不再赘述。
我们使用Numpy演示一下SVD算法的使用。

6.SVD算法演示

在上面的代码片段中,s向量表示的是分解后的∑矩阵中对角线上的元素,所以我们在这里面引入了一个S矩阵,将s向量中的元素放置在这个矩阵中,用以验证分解后的矩阵重建回原先的矩阵A的过程。
仔细的读者可能会注意到,为什么这里使用SVD算法生成的矩阵U与VT是相同的。大家可能会注意到在上面的代码片段中,为何多了一个生成矩阵another_matrix的过程。这是因为一个矩阵与其转置相乘之后的矩阵是对称矩阵(矩阵中的元素沿着对角线对称),将对称矩阵进行分解后的结果可以表示为:
A = V∑VT
通过观察上式,我们不难发现U与V矩阵是相同的,因为这个例子中,U与V矩阵本身也是对称矩阵,不论它的转置与否形式都是一样的。
我们在第2章介绍过用于线性降维的PCA算法,该算法中有一个步骤是将协方差矩阵分解然后重建,下面我们演示一下使用Numpy的SVD算法来实现PCA算法的例子:

7. 基于SVD实现PCA算法

经过降维的数据为:
我们可以看到,数据已经从2维的变为1维的了,这两个PCA算法的计算结果是相同的。其中pca_eig() 函数是使用常规的特征值分解方法来求解的,读者可以参照前面讲述的PCA算法过程来理解这段代码。pca_svd() 函数使用奇异值分解法来求解的。这段代码虽然相对精简,但是背后是经过复杂的数学推导的,下面简要阐述一下PCA算法中奇异值分解的步骤。
1) PCA算法中得到样本的协方差矩阵是经过零均值化处理的,将其去掉常数部分,则也可表示为:
C = XTX
其中,X是经过中心化处理后的样本矩阵X. 前面我们介绍过,一个矩阵与其转置矩阵相乘的结果是一个对称矩阵。观察到协方差矩阵C便是一个对称矩阵,那么将其进行奇异值分解后则可以表示为:
C = V∑VT
2) 将经过中心化的样本矩阵X进行奇异值分解,可以得到:
X = U∑VT
因此,我们可以得到:
XTX
             = (U∑VT)T(U∑VT)
         = V∑TUTU∑VT
 = V∑2VT
奇异矩阵V中的列对应着PCA算法主成分中的主方向,因此可以得到主成分为:
XV = U∑VTV = U∑
关于更详细的数学推倒过程,可参考该网址:
https://stats.stackexchange.com/questions/134282/relationship-between-svd-and-pca-how-to-use-svd-to-perform-pca
Numpy
除了为我们提供常规的数学计算函数和矩阵相关操作之外,还提供了很多功能丰富的模块,随机数模块就是其中一部分。利用随机数模块可以生成随机数矩阵,比Python自带的随机数模块功能要强大,我们看一下下面这个例子。

8. Numpy的随机数功能演示

本文链接:http://host.zzidc.com/wljc/1918.html

关键字:

若无特别注明,文章皆为景安网络原创,转载请注明出处。

上云HI购