歡迎使用CSDN-markdown編輯器

看《機器學習實戰》中的第六章SVM,編程時array和matrix的乘法看的有點混亂,找到一篇博客覺得寫的還比較清楚————轉載自nex3z’s blog

NumPy中array和matrix用於矩陣乘法時的區別

在NumPy中,array用於表示通用的N維數組,matrix則特定用於線性代數計算。array和matrix都可以用來表示矩陣,二者在進行乘法操作時,有一些不同之處。
用array時,運算符 * 用於計算數量積(點乘),函數 dot() 用於計算矢量積(叉乘),例子如:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

print 'a * b = \n', a * b
print 'dot(a, b) = \n', np.dot(a, b)

運行結果:

a * b = 
[[ 5 12]
 [21 32]]
dot(a, b) = 
[[19 22]
 [43 50]]

可見,當a和b爲array時, a * b 計算了a和b的數量積(對應Matlab的 a .* b ), dot(a, b) 計算了a和b的矢量積(對應Matlab的 a * b )。

與array不同的是,使用matrix時,運算符 * 用於計算矢量積,函數 multiply() 用於計算數量積,例子如:

import numpy as np

a = np.mat('1 2; 3 4')
b = np.mat('5 6; 7 8');

print 'a * b = \n', a * b
print 'multiply(a, b) = \n', np.multiply(a, b)

運行結果:

a * b = 
[[19 22]
 [43 50]]
multiply(a, b) = 
[[ 5 12]
 [21 32]]

可見,當a和b爲matrix時, a * b 計算了a和b的矢量積,與 multiply(a, b) 計算了a和b的數量積。當使用matrix時,無論是生成矩陣還是計算,Numpy的風格和Matlab更加貼近,降低了語言切換時的負擔。

發佈了34 篇原創文章 · 獲贊 10 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章