簡介
下面簡單總結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]])