博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
numpy中的matrix和array
阅读量:6547 次
发布时间:2019-06-24

本文共 2524 字,大约阅读时间需要 8 分钟。

hot3.png

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 "
", line 1, in
File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.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),若对齐了,则是对应元素的相乘,返回一个matrix;两个matrix的*表示是两个矩阵的相乘。两个matrix的dot表示矩阵相乘。两个matrix的multiply表示对应元素的相乘。** - matrix中.H,.A,.I表示共轭,转置,逆矩阵。 - 把matrix转换为array用asarray() - asanyarray()根据和你的输入的类型保持一致。## array和matrix的一个很难理解的点 ## 这里会涉及到rank的概念,在线性代数(math)rank表示秩,但是必须明确的是在numpy里rank不是表示秩的概念,是表示维数的概念,这个理解的话需要看此文章:对于多维arrays的数据结构解释:[多维arrays数据结构理解][1]这里暂时理解为秩,虽然这样理解是错误的,但是可以说的通一些事情。(在实际的array和matrix里,英文里介绍的关于rank就用线性代数的秩来理解,但是英文会出现dimensions等于多少等,要求matrix的dimesions必须为2,这里其实指的就是秩,dimensions才是在numpy里的真实的理解形式)array要求秩为1(N*1,1*N等)或者大于2matrix要求秩必须为2(rank必须为2) - 下面是关于ndim和size的理解:
>>> a    array([1, 2])    >>> b    array([[1, 2],           [2, 3]])    >>> c    matrix([[1, 2, 3, 4],            [2, 3, 4, 5]])    >>> d    array([[1, 2, 3, 4],           [2, 3, 4, 5]])    >>> e    matrix([[1, 2, 3, 4],            [2, 3, 4, 5],            [3, 4, 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地址][2]## 补充 ##如何让

M = matrix([, , , [4]]) 

如何转变为 
array([1, 2, 3, 4])

比较优雅的办法:

x=matrix(arange(12).reshape((3,4))) 

matrix([[ 0, 1, 2, 3], 
[ 4, 5, 6, 7], 
[ 8, 9, 10, 11]]) 
x.getA1() 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 
“`

总结

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

关于numpy里的array和matrix的其余的操作函数,另见wiki地址:

转载于:https://my.oschina.net/u/2450896/blog/724550

你可能感兴趣的文章
如何迁移Xenapp或xendesktop数据库 Migration citrix Database
查看>>
jQuery插件开发全解析
查看>>
【我在51CTO】礼树迎蛇 红满社区
查看>>
Linux系统之路由配置
查看>>
Python+selenium自动化公共逻辑步骤封装
查看>>
我的友情链接
查看>>
Nginx实战基础篇二 Nginx主配置文件参数详解
查看>>
我简单的emacs配置
查看>>
51cto博客的第一天
查看>>
我的友情链接
查看>>
c#邮件代码
查看>>
案例:Oracle非常规恢复 ASM磁盘组diskgroup被删除使用kfed进行完美恢复
查看>>
leetCode 290. Word Pattern 哈希表
查看>>
管理onedrive与外部用户的共享
查看>>
XenApp 7和XenApp 6在设计上的不同
查看>>
C++ This指针
查看>>
Spring ioc
查看>>
STP决策
查看>>
pxe的实验
查看>>
How to install SuiteCRM on Debian 9
查看>>