[in]
import numpy as np
a = np.array([1
,2,3
])a[out] array([1
,2,3
])#a為陣列。
[in] b = np.array([4
,5,6
])np.dot(a,b)
[out]
32#結果為標量32
[in] m = np.array([[
1,2,
3],[
2,3,
1],[
0,1,
-1]]
) m
[out] array([[
1,2,
3],[
2,3,
1],[
0,1,
-1]]
)#m為矩陣。
[in] np.dot(a,m)
#利用a陣列對m矩陣的行向量進行線性組合。
[out] array([5
,11,2
])#但是得到的是乙個陣列,而非乙個行向量。
[in] np.dot(m,a)
#利用a陣列對m矩陣的列向量進行線性組合。
[out] array([14
,11,-
1])#但是得到的是乙個陣列,而非乙個行向量。
[in] v_r = a.reshape(1,
-1)#將a陣列轉化為行向量
v_r[out] array([[
1,2,
3]])
[in] v_r.shape
[out](1
,3)[in] np.dot(v_r,a)
#利用a陣列對行向量v_r的列進行線性組合
[out] array([14
])#結果得到乙個陣列
[in] np.dot(a,v_r)
#利用a陣列對行向量v_r的行進行線性組合,但這樣顯然是錯誤的,因為a陣列中有3個元素,但是v_r中卻只有一行
[in] v_c = a.reshape(-1
,1)#將a陣列轉化為列向量
[in] v_c
[out] array([[
1],[
2],[
3]])
[in] v_c.shape
[out](3
,1)[in] np.dot(a,v_c)```#利用a陣列對行向量v_c的行向量進行線性組合
[out] array([14
])[in] np.dot(v_c,a)```#利用a陣列對行向量v_c的列向量進行線性組合,但是v_c只有1列,故詞句**也會報錯
從上述例子中可以看出,陣列與矩陣(向量也是乙個特殊的矩陣)相乘遵循左行右列的規則。陣列在矩陣左邊,便是對矩陣(向量)中的行向量進行線性組合;陣列在矩陣右邊,便是對矩陣(向量)中的列向量進行線性組合。若組合時行/列向量的個數與陣列元素的個數不相等,則程式會報錯。另外,陣列與矩陣的dot運算,得到的結果是乙個陣列,而非乙個向量。
[in] m = np.array([[
1,2,
3],[
2,3,
1],[
0,1,
-1]]
)#建立一矩陣
m[out] array([[
1,2,
3],[
2,3,
1],[
0,1,
-1]]
)[in] np.dot(v_r,m)
[out] array([[
5,11,
2]])
#得到的是乙個向量(矩陣),而非乙個陣列,這就是與矩陣和陣列的dot之間的差別。
[in] np.dot(m,v_r)
#詞條為錯誤語句,因為不滿足矩陣相乘內標相同的規則。
[in] np.dot(m,v_c)
[out] array([[
14],[
11],[
-1]]
)[in] np.dot(v_r,v_c)
[out] array([[
14]])
[in] np.dot(v_c,v_r)
[out] array([[
1,2,
3],[
2,4,
6],[
3,6,
9]])
矩陣和矩陣之間的運算和線性代數中的是完全一樣的,需要內標相同才能運算,最後得到的結果也是乙個矩陣。 對NumPy中dot 函式的理解
今天學習到numpy基本的運算方法,遇到了乙個讓我比較難理解的問題。就是dot函式是如何對矩陣進行運算的。一 dot 的使用 dot 返回的是兩個陣列的點積 dot product 1.如果處理的是一維陣列,則得到的是兩陣列的內積 順便去補一下數學知識 in d np.arange 0,9 out ...
Numpy矩陣乘積函式(dot)運算規則解析
a為二維m n的舉證,b必須為n l的矩陣,l兩個矩陣的n必須一致,也就是說a有多少列,b就必須有多少行,否則無法運算。結果得到m l的矩陣 m l np.dot m n,n l m n l指維度,得到m l的矩陣 運算順序如下圖 程式演示如下 import numpy as np a 1,2,3 ...
Numpy 中的矩陣運算
array list 建立矩陣或者高維向量,例如有 a array 1,2,3 2,3,4 傳入的引數也可是元組。min方法 a.min 0 取每列的最小值,返回乙個陣列 array 1,2,3 a.min 1 取每行的最小值,返回乙個陣列 array 1,2 a.min 得到矩陣中所有元素的最小值...