加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

numpy中的matrix和array

发布时间:2020-12-13 20:47:30 所属栏目:PHP教程 来源:网络整理
导读:Preface 在相干聚类算法的实现进程中,用python语言实现,会常常出现array和matrix的混淆,这里做个总结。 array数组 numpy中最基本(默许)的类型是array,他的相干操作都是按元素操作的即用作数值计算当中(按元素操作有+,-, ,/,* 等)。相乘举例: from nu

Preface

在相干聚类算法的实现进程中,用python语言实现,会常常出现array和matrix的混淆,这里做个总结。

array数组

numpy中最基本(默许)的类型是array,他的相干操作都是按元素操作的即用作数值计算当中(按元素操作有+,-,,/,*等)。相乘举例:

from numpy import * >>> a=array([1,2]) >>> a array([1,2]) >>> b=array([2,3]) >>> b array([2,3]) >>> c=a*b >>> c array([2,6]) >>> dot(a,b) 8

两个array的相乘*指的是对应元素的相乘;两个array的dot表示矩阵的相乘。

  • 若a是array,则a.T表示转置。
  • 把array转换为matrix用asmatrix()

  • 多数numpy函数返回的是array类型,不是matrix类型。

matrix矩阵

在numpy中的特殊类型,是作为array的子类出现,所以继承了array的所有特性并且有自己的特殊的地方,专门用来处理线性代数操作(*表示矩阵的相乘,但是对两个matrix的除/则表示对应元素的相除。)。乘法举例如:

>>> m=mat([2,3]) >>> m matrix([[2,3]]) >>> n=([1,2]) >>> n [1,2] >>> p=m*n Traceback (most recent call last): File "<stdin>",line 1,in <module> File "C:Python27libsite-packages umpymatrixlibdefmatrix.py",line 341,i n __mul__ return N.dot(self,asmatrix(other)) ValueError: objects are not aligned >>> dot(m,n) matrix([[8]]) >>> multiply(m,n) matrix([[2,6]])

* 两个matrix相乘毛病缘由是m的列不等于n的行,也即不对齐(aligned),若对齐了,则是对应元素的相乘,返回1个matrix;两个matrix的表示是两个矩阵的相乘。两个matrix的dot表示矩阵相乘。两个matrix的multiply表示对应元素的相乘。*

  • matrix中.H,.A,.I表示共轭,转置,逆矩阵。
  • 把matrix转换为array用asarray()
  • asanyarray()根据和你的输入的类型保持1致。

array和matrix的1个很难理解的点

这里会触及到rank的概念,在线性代数(math)rank表示秩,但是必须明确的是在numpy里rank不是表示秩的概念,是表示维数的概念,这个理解的话需要看此文章:对多维arrays的数据结构解释:
多维arrays数据结构理解

这里暂时理解为秩,虽然这样理解是毛病的,但是可以说的通1些事情。(在实际的array和matrix里,英文里介绍的关于rank就用线性代数的秩来理解,但是英文会出现dimensions等于多少等,要求matrix的dimesions必须为2,这里其实指的就是秩,dimensions才是在numpy里的真实的理解情势)

array要求秩为1(N*1,1*N等)或大于2
matrix要求秩必须为2(rank必须为2)

  • 下面是关于ndim和size的理解:
>>> a array([1,2]) >>> b array([[1,2],[2,3]]) >>> c matrix([[1,2,3,4],4,5]]) >>> d array([[1,5]]) >>> e matrix([[1,5],[3,5,6]]) >>> a.size 2 >>> a.ndim 1 >>> b.size 4 >>> b.ndim 2 >>> c.size 8 >>> c.ndim 2 >>> d.size 8 >>> d.ndim 2 >>> e.ndim 2 >>>e.size 12

这里ndim就是求的是rank,所以会发现matrix的都是2,但是array的就会存在差异,需要计算等。size返回的是元素的个数

  • 关于dim,shape,rank,dimension and axis in numpy的细节的问题理解:

stackoverflow地址

补充

如何让

 M = matrix([[1],[2],[3],[4]])
 如何转变成
 array([1,4])

比较优雅的办法:

>>> x=matrix(arange(12).reshape((3,4)))
>>> x
matrix([[ 0,1,3],[ 4,6,7],[ 8,9,10,11]])
>>> x.getA1()
array([ 0,7,8,11])

总结

在应用中,还是用array好点,array的唯1缺点就是在表示矩阵的相乘时候,要用dot,而不是*。

关于numpy里的array和matrix的其余的操作函数,另见wiki地址:http://wiki.scipy.org/NumPy_for_Matlab_Users

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读