Python中的numpy矩阵运算

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')
>>> a
matrix([[4, 3],
        [2, 1]])
>>> b
matrix([[1, 2],
        [3, 4]])
>>> a*b
matrix([[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*d
array([[4, 6],
       [6, 4]])

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

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

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

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

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

取得是整数

基本运算

import numpy as np
a = np.mat([[-1,2],[2,3]])
b = np.mat([[3,4],[4,5]])
print 'a:\n',a
print 'b:\n',b
print '\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",eigval
print'\n a eig vector:\n',eigvec

a = np.zeros([4,5])
print  '\n all zero \n',a
a = np.ones([7,6])
print  '\n all one \n',a
a = np.eye(4,7)
print  '\n 4x7 diagonal \n',a
a = np.diag(range(5))
print  '\n 5x5 diagonal \n',a
a = 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中的除是对矩阵元素展开计算

你可能感兴趣的:(python)