numpy matrices必須是2維的,但是 numpy arrays (ndarrays) 可以是多維的(1d,2d,3d····nd). matrix是array的乙個小的分支,包含於array。所以matrix 擁有array的所有特性。【所以:在sklearn 中如果傳入的特徵只有乙個,要使用x.values.reshape(-1,1) 轉化格式】
在numpy中matrix的主要優勢是:相對簡單的乘法運算符號。例如,a和b是兩個matrices,那麼a*b,就是矩陣積。
import numpy as np
in [34]: a = np.mat([[4,3,],[1,2]])
in [35]: a
out[35]:
matrix([[4, 3],
[1, 2]])
in [36]: b = np.mat([[1,2],[3,4]])
in [37]: b
out[37]:
matrix([[1, 2],
[3, 4]])
in [38]: a*b
out[38]:
matrix([[13, 20],
[ 7, 10]])
但是如果要得到矩陣對應元素相乘的話 可以使用numpy 的multiply 方法
from numpy import multiply
multiply(c,d)
matrix 和 array 都可以通過objects後面加 (.t) 得到其轉置。但是 matrix objects 還可以在後面加 (.h) 得到共軛矩陣, 加 ( .i ) 得到逆矩陣。
相反的是在numpy裡面arrays遵從對應元素的運算。
in [40]: c = np.asarray(a)
in [41]: c
out[41]:
array([[4, 3],
[1, 2]])
in [42]: d = np.asarray(b)
in [43]: d
out[43]:
array([[1, 2],
[3, 4]])
in [44]: c*d
out[44]:
array([[4, 6],
[3, 8]])
而要實現矩陣相乘,則需要numpy裡面的dot命令 (這個對兩中型別都適用,因為matrix 屬於array):
in [45]: np.dot(a,b)
out[45]:
matrix([[13, 20],
[ 7, 10]])
in [46]: np.dot(c,d)
out[46]:
array([[13, 20],
[ 7, 10]])
** 運算子的作用也不一樣 :
in [47]: a**2
out[47]:
matrix([[19, 18],
[ 6, 7]])
in [48]: a
out[48]:
matrix([[4, 3],
[1, 2]])
in [49]: c**2
out[49]:
array([[16, 9],
[ 1, 4]], dtype=int32)
in [50]: c
out[50]:
array([[4, 3],
[1, 2]])
因為a是個matrix,所以a**2返回的是a*a,相當於矩陣相乘。而c是array,c**2相當於,c中的元素逐個求平方。
問題就出來了,如果乙個程式裡面既有matrix 又有array,會讓人腦袋大。但是如果只用array,你不僅可以實現matrix所有的功能,還減少了程式設計和閱讀的麻煩。
當然你可以通過下面的兩條命令輕鬆的實現兩者之間的轉換:np.asmatrix和np.asarray
NumPy中ndarray和matrix的四則運算
numpy中最重要的類是ndarray,顧名思義,即多維陣列。import numpy as np行向量 a np.array 1,2,3 a.shape 3l,列向量 b np.array 1 2 3 b.shape 3l,1l 二維矩陣 m np.array 1,2,3 4,5,6 7,8,9 ...
論numpy中matrix 和 array的區別
論numpy中matrix 和 array的區別 csdn部落格 2014年03月07日 16 26 55 numpy matrices必須是2維的,但是 numpy arrays ndarrays 可以是多維的 1d,2d,3d nd matrix是array的乙個小的分支,包含於array。所以...
numpy中matrix和array的區別
import numpy as np a np.mat 4 3 2 1 b np.mat 1 2 3 4 print a 4 3 2 1 print b 1 2 3 4 print a b 13 20 5 8 c np.array 4,3 2,1 d np.array 1,2 3,4 print c...