1. 程式人生 > >np.dot(),np.outer(),np.multiply(),*

np.dot(),np.outer(),np.multiply(),*

這一個部落格主要是整理所有的關於矩陣還是陣列的乘法的細節。

程式碼:

你需要在下面的程式碼裡面主要到這些點:

(1):np.dot()如果碰到的是秩為1的陣列,那麼執行的是對應位置的元素相乘再相加;如果遇到的是秩不為1的陣列,那麼執行的是矩陣相乘。但是需要注意的是矩陣與矩陣相乘是秩為2,矩陣和向量相乘秩為1。

(2):np.multiply()表示的是陣列和矩陣對應位置相乘,輸出和輸出的結果shape一致。

(3):np.outer()表示的是兩個向量相乘,拿第一個向量的元素分別與第二個向量所有元素相乘得到結果的一行。

(4):*對陣列執行的是對應位置相乘,對矩陣執行的是矩陣相乘。

import numpy as np

print("下面我們將討論一些關於一維陣列的乘法的問題")
A=np.array([1,2,3])
B=np.array([2,3,4])
c=[1,2,3]
print("*:",A*B)#對陣列執行的是對應位置元素相乘
print("np.dot():",np.dot(A,B))#當dot遇到佚為1,執行按位乘並相加
print("np.multiply():",np.multiply(A,B))#對陣列執行的是對應位置的元素相乘
print("np.outer():",np.outer(A,B))#A的一個元素和B的元素相乘的到結果的一行

print("下面我們將討論一些關於二維陣列和二位陣列的乘法的問題")
a=np.array([[1,2,3],[3,4,5]])
b=np.array([[1,1],[2,2],[3,3]])
c=np.array([[2,2,2],[3,3,3]])
#出錯:維度不對應:print("*:",a*b)
print("*:",a*c)#*對陣列執行的是對應位置相乘
print("np.dot():",np.dot(a,b))#當dot遇到佚不為1執行矩陣的乘法(2,3)×(3,2)=(2,2)
#出錯,維度不對應:print("np.multiply():",np.multiply(a,b))
print("np.multiply():",np.multiply(a,c))#陣列或者矩陣對應位置元素相乘,返回的是與原陣列或者矩陣的大小一致

print("下面我們將討論一些關於矩陣的乘法的問題")
A=np.mat([[1,2,3],[3,4,5]])
B=np.mat([[1,1],[2,2],[3,3]])
C=np.mat([[2,2,2],[3,3,3]])
D=[1,2,3]
print("*:",A*B)#*對矩陣執行的是矩陣相乘
print("np.dot():",np.dot(A,B))#dot對矩陣執行的是矩陣相乘
print("np.dot():",np.dot(A,D))
#這裡可以看出矩陣和矩陣的相相乘是軼為2的,所以是執行的矩陣乘法,但是矩陣和向量相乘是軼為1的,執行的是對應相乘加和
print("np.multiply():",np.multiply(A,C))#multiply執行的是矩陣對應元素相乘

結果:

下面我們將討論一些關於一維陣列的乘法的問題
*: [ 2  6 12]
np.dot(): 20
np.multiply(): [ 2  6 12]
np.outer(): [[ 2  3  4]
 [ 4  6  8]
 [ 6  9 12]]
下面我們將討論一些關於二維陣列和二位陣列的乘法的問題
*: [[ 2  4  6]
 [ 9 12 15]]
np.dot(): [[14 14]
 [26 26]]
np.multiply(): [[ 2  4  6]
 [ 9 12 15]]
下面我們將討論一些關於矩陣的乘法的問題
*: [[14 14]
 [26 26]]
np.dot(): [[14 14]
 [26 26]]
np.dot(): [[14 26]]
np.multiply(): [[ 2  4  6]
 [ 9 12 15]]