简介
下面简单总结python中矩阵的常用运算。
重要注释:在numpy中既可以用二维数组(numpy.ndarray)来表示矩阵,也可用numpy.matrix来表示矩阵。但我统一选择用ndarray来表示矩阵。
原因:
- ndarray更通用,可以表示任意N维数组;
- 官方文档不推荐用matrix,可能会在未来版本中移除matrix
- 以前用matrix的一个好处是,可以直接用
a*b
进行矩阵乘法,而ndarray需要用np.dot(a,b)
。但在较新版本中(Python 3.5+,NumPy 1.10+),引入了@
运算符,即对于二维数组(ndarray),可以直接用a@b
进行矩阵乘法。
矩阵按元素相乘
方法:a*b
或np.multiply(a,b)
实例:
In [37]: a
Out[37]:
array([[ 1, 0],
[ 0, -1]])
In [38]: b = np.array([[0,1],[1,0]])
In [39]: b
Out[39]:
array([[0, 1],
[1, 0]])
In [41]: a*b
Out[41]:
array([[0, 0],
[0, 0]])
In [42]: np.multiply(a,b)
Out[42]:
array([[0, 0],
[0, 0]])
矩阵乘法
方法:a@b
或者np.dot(a,b)
实例:
In [43]: a = np.diag([1,-1])
In [44]: b = np.array([[0,1],[1,0]])
In [45]: a@b
Out[45]:
array([[ 0, 1],
[-1, 0]])
In [46]: np.dot(a,b)
Out[46]:
array([[ 0, 1],
[-1, 0]])
注意:np.dot(a,b)
使用说明:
- 当a和b都为2维数组(矩阵)时,进行矩阵乘法
- 当a和b都为1维数组时,进行内积运算,等价于
np.sum(a*b)
矩阵的指数运算
方法:scipy.linalg.expm(a)
实例:
In [29]: a = np.array([[0,1],[1,0]])
In [30]: expm(-1j/2*np.pi*a) #先导入, from scipy.linalg import expm
Out[30]:
array([[0.+0.j, 0.-1.j],
[0.-1.j, 0.+0.j]])