numpy 支援的幾類矩陣乘法也很重要。
你已看過了一些元素級乘法。你可以使用multiply
函式或*
運算子來實現。回顧一下,它看起來是這樣的:
m = np.array([[1,2,3],[4,5,6]])
m# 顯示以下結果:
# array([[1, 2, 3],
# [4, 5, 6]])
n = m * 0.25
n# 顯示以下結果:
# array([[ 0.25, 0.5 , 0.75],
# [ 1. , 1.25, 1.5 ]])
m * n
# 顯示以下結果:
# array([[ 0.25, 1. , 2.25],
# [ 4. , 6.25, 9. ]])
np.multiply(m, n) # 相當於 m * n
# 顯示以下結果:
# array([[ 0.25, 1. , 2.25],
# [ 4. , 6.25, 9. ]])
要獲得矩陣乘積,你可以使用 numpy 的matmul
函式。
a = np.array([[1,2,3,4],[5,6,7,8]])
a# 顯示以下結果:
# array([[1, 2, 3, 4],
# [5, 6, 7, 8]])
a.shape
# 顯示以下結果:
# (2, 4)
b = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
b# 顯示以下結果:
# array([[ 1, 2, 3],
# [ 4, 5, 6],
# [ 7, 8, 9],
# [10, 11, 12]])
b.shape
# 顯示以下結果:
# (4, 3)
c = np.matmul(a, b)
c# 顯示以下結果:
# array([[ 70, 80, 90],
# [158, 184, 210]])
c.shape
# 顯示以下結果:
# (2, 3)
如果你的矩陣具有不相容的形狀,則會出現以下錯誤:
np.matmul(b, a)
# 顯示以下錯誤:
# valueerror: shapes (4,3) and (2,4) not aligned: 3 (dim 1) != 2 (dim 0)
有時候,在你以為要用matmul
函式的地方,你可能會看到 numpy 的dot
函式。事實證明,如果矩陣是二維的,那麼dot
和matmul
函式的結果是相同的。
所以這兩個結果是等價的:
a = np.array([[1,2],[3,4]])
a# 顯示以下結果:
# array([[1, 2],
# [3, 4]])
np.dot(a,a)
# 顯示以下結果:
# array([[ 7, 10],
# [15, 22]])
a.dot(a) # you can call你可以直接對 `ndarray` 呼叫 `dot`
# 顯示以下結果:
# array([[ 7, 10],
# [15, 22]])
np.matmul(a,a)
# array([[ 7, 10],
# [15, 22]])
雖然這兩個函式對於二維資料返回相同的結果,但在用於其他資料形狀時,你應該謹慎選擇。你可以在matmul
和dot
文件中詳細了解它們的差異,並找到其他 numpy 函式的鏈結。 Numpy中的矩陣乘法
對於numpy.array multiply 意思是對應位置的元素相乘 如果希望對array物件進行嚴格的矩陣乘法,必須使用numpy.dot 或者numpy.matmul 函式,這兩者是等效的 對於matrix物件上情況是相反的,必須使用np.multiply 函式。因為 過載矩陣運算規則只限於m...
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...
numpy 向量 矩陣的乘法
import numpy as np一維向量與一維向量 一維向量與一維向量 vec1 np.array 1 2,3 vec2 np.array 4 5,6 np.inner 對應位置的元素相乘相加求和 res inner1 np.inner vec1,vec2 32 對應位置的元素相乘 成為新矩陣該...