總結:1、np.multiply:矩陣和矩陣,陣列與陣列之間,橫軸各對應元素相乘,因此矩陣的橫軸上的元素數量要相等,或者其中一 個橫軸元素數為1
2、np.matmul 第乙個矩陣或陣列的橫軸元素與第二個矩陣或陣列的縱軸元素進行對應位置相乘再求和,相乘時,對應的元素數量必須相等。
3、用 「 * 」符號對二維陣列進行運算,效果等於np.multiply.-----
用 「 * 」符號對二維j矩陣進行運算,效果等於np.matmul.----
舉例:一維陣列之間的相乘:
a1 = np.array(np.arange(1,8,2))
b1 = a1.reshape(2,2)
# a4 = np.array(np.random.normal(0,0.01,size=25))
#一維陣列的相乘
print("a1:",a1)
print("a1.t",a1.t)
print("a1*a1==",a1*a1)
print("a1@a1==",a1@a1)
print("np.dot(a1,a1)==",np.dot(a1,a1))
print("np.matmul==",np.matmul(a1,a1))
輸出結果:
a1: [1 3 5 7]
a1.t [1 3 5 7]
a1*a1== [ 1 9 25 49]
a1@a1== 84
np.dot(a1,a1)== 84
np.matmul== 84
#二維陣列的相乘
b2 = np.array([[1,2,3,4],[3,4,5,6],])
print("b1:",b1)
print("b2:",b2)
print("b1.t:",b1.t)
print("b1*b1==",np.multiply(b1,b1))#二維陣列相乘b1*b1 等於np.multiply(b1,b1),
print("b2*b1==",b1*b2)
print("b1*b1.t==",b1*b1.t)
print("[email protected]",[email protected])#兩個矩陣點乘,矩陣1的橫向維度的長度和矩陣2的縱向維度的長度相等,否則會報錯!b1(1,4),b1.t(4,1)
print("np.dot(b1,b1.t)==",np.dot(b1,b1.t))
print("np.matmul==",np.matmul(b1,b1.t))
輸出結果:
b1: [[1 3 5 7]]
b2: [[1 2 3 4]
[3 4 5 6]]
b1.t: [[1]
[3][5]
[7]]
b1*b1== [[ 1 9 25 49]]
b2*b1== [[ 1 6 15 28]
[ 3 12 25 42]]
b1*b1.t== [[ 1 3 5 7]
[ 3 9 15 21]
[ 5 15 25 35]
[ 7 21 35 49]]
[email protected] [[84]]
np.dot(b1,b1.t)== [[84]]
np.matmul== [[84]]
矩陣之間相乘
c1 = np.matrix(np.array(np.arange(1,8,2).reshape(1,4) ))
c2 = np.matrix([[1,2,3,4],[3,4,5,6],] )
print("c1:",c1)
print("c2:",c2)
print("c1.t:",c1.t)
#二維矩陣相乘c1*c1 不等於np.multiply(c1,c1),
# print("c1*c1==",c1*c1)矩陣用 "*"相乘,等於np.dot(c1,c1),因此需要橫軸縱軸元素數量相等,否則報錯
print("np.multiply(c1,c1)==",np.multiply(c1,c1))
print("np.multiply(c1,c1.t)==",np.multiply(c1,c1.t))
print("np.multiply(c1,c2)==",np.multiply(c1,c2))
# print("np.multiply(c1,c2.t)==",np.multiply(c1,c2.t))#報錯,shape(1,4) (4,2),橫軸元素數量不匹配
# print("c2*c1==",c1*c2)#同上,矩陣點乘需要橫縱軸元素數量相等c1(1,n),c2(n,1)
print("c1*c2.t==",c1*c2.t)#同上,矩陣點乘需要矩陣1橫軸和矩陣2縱軸元素數量相等c1(1,n),c2(n,2)
print("c1*c1.t==",c1*c1.t)
print("[email protected]",[email protected])#兩個矩陣點乘,矩陣1的橫向維度的長度和矩陣2的縱向維度的長度相等,否則會報錯!c1(1,4),c1.t(4,1)
print("np.dot(c1,c1.t)==",np.dot(c1,c1.t))
print("np.matmul(c1,c1.t)==",np.matmul(c1,c1.t))
print("np.matmul(c1,c2.t)==",np.matmul(c1,c2.t))
# print("np.matmul(c1,c2)==",np.matmul(c1,c2))#報錯,矩陣1shape(1,4),矩陣2 shape(2,4),點乘需要(y,n),(n,x)
輸出結果:
c1: [[1 3 5 7]]
c2: [[1 2 3 4]
[3 4 5 6]]
c1.t: [[1]
[3][5]
[7]]
np.multiply(c1,c1)== [[ 1 9 25 49]]
np.multiply(c1,c1.t)== [[ 1 3 5 7]
[ 3 9 15 21]
[ 5 15 25 35]
[ 7 21 35 49]]
np.multiply(c1,c2)== [[ 1 6 15 28]
[ 3 12 25 42]]
c1*c2.t== [[50 82]]
c1*c1.t== [[84]]
[email protected] [[84]]
np.dot(c1,c1.t)== [[84]]
np.matmul(c1,c1.t)== [[84]]
np.matmul(c1,c2.t)== [[50 82]]
numpy 陣列和矩陣的乘法
1.當為array的時候,預設d f就是對應元素的乘積,multiply也是對應元素的乘積,dot d,f 會轉化為矩陣的乘積,dot點乘意味著相加,而multiply只是對應元素相乘,不相加 2.當為mat的時候,預設d f就是矩陣的乘積,multiply轉化為對應元素的乘積,dot d,f 為矩...
numpy 陣列 矩陣乘法運算
為了區分三種乘法運算的規則,具體分析如下 import numpy as np函式作用 陣列和矩陣對應位置相乘,輸出與相乘陣列 矩陣的大小一致 1.1陣列場景 a np.arange 1,5 reshape 2,2 aarray 1,2 3,4 b np.arange 0,4 reshape 2,2...
矩陣乘法 矩陣乘法的基本實現
求解關於兩個矩陣的乘積 參考線性代數裡面的兩個矩陣相乘的規則,我這裡不再贅述,詳情附上了乙個鏈結,我的程式設計也是用了裡面的例子 這裡寫鏈結內容 具體的過程我會在 片裡面加上注釋 矩陣乘法 author seen 2015 09 18 include using namespace std int ...