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的c∗d运算相当于对应的元素相乘
>>> 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,所以a∗∗2返回的是a∗a,相当于矩阵相乘。而c是array,c∗∗2相当于,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中的除是对矩阵元素展开计算