轉載 論numpy中matrix 和 array的區(qū)別
Numpy mat必須是2維的,但是 numpy arrays (ndarrays) 可以是多維的(1D碉纺,2D,3D····ND). Matrix是Array的一個小的分支,包含于Array衔统。所以matrix 擁有array的所有特性藕甩。
在numpy中matrix的主要優(yōu)勢是:相對簡單的乘法運算符號。例如曹傀,a和b是兩個matrices辐脖,那么a*b,就是矩陣積皆愉。
import numpy as np
import numpy as np
a=np.mat([[1,2], [3,4]])
b=np.mat([[5,6],[7,8]])
print(a)
print(b)
print(a*b)
輸出
[[1 2]
[3 4]]
[[5 6]
[7 8]]
[[19 22]
[43 50]]
matrix 和 array 都可以通過objects后面加.T 得到其轉置嗜价。但是 matrix objects 還可以在后面加 .H f得到共軛矩陣, 加 .I 得到逆矩陣。
相反的是在numpy里面arrays遵從逐個元素的運算幕庐,所以array:c 和d的cd運算相當于matlab里面的c.*d運算久锥。
c=np.array([[4, 3], [2, 1]])
d=np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
# [6 4]]
而矩陣相乘,則需要numpy里面的dot命令 :
print(np.dot(c,d))
# [[13 20]
# [ 5 8]]
** 運算符的作用也不一樣 :
print(a**2)
# [[22 15]
# [10 7]]
print(c**2)
# [[16 9]
# [ 4 1]]
因為a是個matrix异剥,所以a2返回的是aa瑟由,相當于矩陣相乘。而c是array冤寿,c*2相當于歹苦,c中的元素逐個求平方。
問題就出來了疚沐,如果一個程序里面既有matrix 又有array暂氯,會讓人腦袋大。但是如果只用array亮蛔,你不僅可以實現(xiàn)matrix所有的功能痴施,還減少了編程和閱讀的麻煩。
當然你可以通過下面的兩條命令輕松的實現(xiàn)兩者之間的轉換:np.asmatrix和np.asarray