numpy中的矩阵和数组运算
来源:互联网 发布:mysql不支持中文 编辑:程序博客网 时间:2024/06/11 12:54
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:\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([1, 2, 3, [4]])
如何转变为
array([1, 2, 3, 4])
比较优雅的办法:
x=matrix(arange(12).reshape((3,4)))
x
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地址:http://wiki.scipy.org/NumPy_for_Matlab_Users
numpy中的matrix和array
0 0
- numpy中的矩阵和数组运算
- NumPy 数组矩阵运算
- Numpy中的数组<矩阵>
- Python中的numpy矩阵运算
- Numpy 中数组和矩阵的基本运算
- 运用numpy进行数组、向量、矩阵运算
- numpy矩阵运算和常用函数
- NumPy学习笔记(2)--Array数组和矩阵基本运算
- NumPy学习笔记(2)--Array数组和矩阵基本运算
- Python numpy(ndarray 随机数组 常用操作 线性方程组和矩阵运算)
- python numpy矩阵和数组的转换
- numpy 矩阵运算
- NumPy矩阵运算
- numpy 矩阵运算
- Numpy矩阵运算
- 【python学习笔记】18:numpy数组函数与矩阵运算
- 8、NumPy 基础:数组和矢量运算
- Matlab矩阵和数组运算
- android在程序代码中使用res目录下的String资源
- gethostname()与gethostbyname()的联系
- Selenium Girl错误分析
- Easy UI1.5中多级取值(子属性取值)
- uva10561 Treblecross
- numpy中的矩阵和数组运算
- 平方立方
- hibernate 注解@Formula解析和使用简介
- centos 配置tftp
- 解决5.0 和6.0 以上手机button 默认增加阴影的问题
- js变量提升
- C#入门之编程练习
- Genymotion上不能安装APK软件的问题
- 课程设计实训-3 英文词典