dot函數和*的區別


dot函數是常規的矩陣相乘

*是特殊的乘法

import numpy as np
a = [[1,2,3],[4,5,6]]
a = np.array(a)
b = [[1,2],[4,5],[3,6]]
b= np.array(b)
#一個(2,3), 一個(3,2),是可以正常的矩陣相乘的
c = np.dot(a, b)
print c
-->result: array([[18, 30],
              [42, 69]])
說明dot是正常的矩陣相乘的方法
c = a * b
-->result: error 不能相乘

c = np.outer(a,b)
-->result:
array([[ 1,  2,  4,  5,  3,  6],
       [ 2,  4,  8, 10,  6, 12],
       [ 3,  6, 12, 15,  9, 18],
       [ 4,  8, 16, 20, 12, 24],
       [ 5, 10, 20, 25, 15, 30],
       [ 6, 12, 24, 30, 18, 36]])
說明outer是a的第一個元素跟b的每一個元素相乘作為第一行,第二個元素跟b的每一個元素相乘作為第二個元素...
一般outer()用的很少

d = np.array([[1,2,1],[2,3,1]]) 
c = a*d 
result: array([[ 1, 4, 3], [ 8, 15, 6]]) 
*來說只能是shape一樣的才能相乘,與其他shape的矩陣相乘(*)都會報錯, 結果是對應元素相乘作為當前位置的結果,結果矩陣的形狀保持不變

總結:兩個array的相乘*指的是對應元素的相乘;兩個array的dot表示矩陣的相乘。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM