Python中的numpy矩阵运算

来源:互联网 发布:淘宝关于产品瑕疵说明 编辑:程序博客网 时间:2024/06/05 11:29

numpy中matrix 和 array的区别

Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。

在numpy中matrix的主要优势是:
(1)相对简单的乘法运算符号。
例如,a和b是两个matrices,那么a*b,就是矩阵积。

>>> import numpy as np>>> a=np.mat('4 3; 2 1')>>> b=np.mat('1 2; 3 4')>>> amatrix([[4, 3],        [2, 1]])>>> bmatrix([[1, 2],        [3, 4]])>>> a*bmatrix([[13, 20],        [ 5,  8]])

(2)matrix 和 array 都可以通过objects后面加.T 得到其转置。但是 matrix objects 还可以在后面加 .H得到共轭矩阵, 加 .I 得到逆矩阵。相反的是在numpy里面arrays遵从逐个元素的运算,所以array:c 和d的cd运算相当于对应的元素相乘

>>> c=np.array([[4, 3], [2, 1]])>>> d=np.array([[1, 2], [3, 4]])>>> c*darray([[4, 6],       [6, 4]])

(3) 运算符的作用也不一样 :

>>> a**2matrix([[22, 15],        [10,  7]])>>> c**2array([[16,  9],       [ 4,  1]])

因为a是个matrix,所以a2返回的是aa,相当于矩阵相乘。而c是array,c2相当于,c中的元素逐个求平方。

(3)numpy中矩阵间的除法运算

>>> a/2matrix([[2, 1],        [1, 0]])>>> a/bmatrix([[4, 1],        [0, 0]])

取得是整数

基本运算

import numpy as npa = np.mat([[-1,2],[2,3]])b = np.mat([[3,4],[4,5]])print 'a:\n',aprint 'b:\n',bprint '\n a transpose:\n',a.T #转置print '\n a inv:\n',np.linalg.inv(a) # 求逆print "\n a-b: \n",a-b  # a - b,矩阵相减print "\n a dot b: \n",a*b #2x2矩阵,矩阵相乘print "\n a/b \n:",b/a  # numpy中的除是对矩阵元素展开计算print "\n a trace:\n",np.trace(a)  #求迹eigval,eigvec = np.linalg.eig(a) #特征,特征向量print "\n a eig value:\n",eigvalprint'\n a eig vector:\n',eigveca = np.zeros([4,5])print  '\n all zero \n',aa = np.ones([7,6])print  '\n all one \n',aa = np.eye(4,7)print  '\n 4x7 diagonal \n',aa = np.diag(range(5))print  '\n 5x5 diagonal \n',aa = np.empty((2,3))print '\n empty \n',a

结果:

a:[[-1  2] [ 2  3]]b:[[3 4] [4 5]] a transpose:[[-1  2] [ 2  3]] a inv:[[-0.42857143  0.28571429] [ 0.28571429  0.14285714]] a-b: [[-4 -2] [-2 -2]] a dot b: [[ 5  6] [18 23]] a/b : [[-3  2] [ 2  1]] a trace:2 a eig value:[-1.82842712  3.82842712] a eig vector:[[-0.92387953 -0.38268343] [ 0.38268343 -0.92387953]] all zero [[ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.]] all one [[ 1.  1.  1.  1.  1.  1.] [ 1.  1.  1.  1.  1.  1.] [ 1.  1.  1.  1.  1.  1.] ...,  [ 1.  1.  1.  1.  1.  1.] [ 1.  1.  1.  1.  1.  1.] [ 1.  1.  1.  1.  1.  1.]] 4x7 diagonal [[ 1.  0.  0. ...,  0.  0.  0.] [ 0.  1.  0. ...,  0.  0.  0.] [ 0.  0.  1. ...,  0.  0.  0.] [ 0.  0.  0. ...,  0.  0.  0.]] 5x5 diagonal [[0 0 0 0 0] [0 1 0 0 0] [0 0 2 0 0] [0 0 0 3 0] [0 0 0 0 4]] empty [[ 1.  0.  0.] [ 0.  0.  0.]]

注意矩阵除法运算的结果
print "\n a/b \n:",b/a # numpy中的除是对矩阵元素展开计算

原创粉丝点击