
- NumPy 教程
- NumPy - 首頁
- NumPy - 簡介
- NumPy - 環境
- NumPy 陣列
- NumPy - Ndarray 物件
- NumPy - 資料型別
- NumPy 建立和運算元組
- NumPy - 陣列建立例程
- NumPy - 陣列操作
- NumPy - 從現有資料建立陣列
- NumPy - 從數值範圍建立陣列
- NumPy - 迭代陣列
- NumPy - 重塑陣列
- NumPy - 連線陣列
- NumPy - 堆疊陣列
- NumPy - 分割陣列
- NumPy - 展平陣列
- NumPy - 轉置陣列
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高階索引
- NumPy 陣列屬性和操作
- NumPy - 陣列屬性
- NumPy - 陣列形狀
- NumPy - 陣列大小
- NumPy - 陣列步長
- NumPy - 陣列元素大小
- NumPy - 廣播
- NumPy - 算術運算
- NumPy - 陣列加法
- NumPy - 陣列減法
- NumPy - 陣列乘法
- NumPy - 陣列除法
- NumPy 高階陣列操作
- NumPy - 交換陣列的軸
- NumPy - 位元組交換
- NumPy - 副本和檢視
- NumPy - 元素級陣列比較
- NumPy - 過濾陣列
- NumPy - 連線陣列
- NumPy - 排序、搜尋和計數函式
- NumPy - 搜尋陣列
- NumPy - 陣列的並集
- NumPy - 查詢唯一行
- NumPy - 建立日期時間陣列
- NumPy - 二元運算子
- NumPy - 字串函式
- NumPy - 數學函式
- NumPy - 統計函式
- NumPy - 矩陣庫
- NumPy - 線性代數
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 繪製直方圖
- NumPy - NumPy 的 I/O
- NumPy 排序和高階操作
- NumPy - 排序陣列
- NumPy - 沿軸排序
- NumPy - 使用花式索引排序
- NumPy - 結構化陣列
- NumPy - 建立結構化陣列
- NumPy - 操作結構化陣列
- NumPy - 欄位訪問
- NumPy - 記錄陣列
- Numpy - 載入陣列
- Numpy - 儲存陣列
- NumPy - 向陣列追加值
- NumPy - 交換陣列的列
- NumPy - 向陣列插入軸
- NumPy 處理缺失資料
- NumPy - 處理缺失資料
- NumPy - 識別缺失值
- NumPy - 刪除缺失資料
- NumPy - 填充缺失資料
- NumPy 效能最佳化
- NumPy - 使用陣列進行效能最佳化
- NumPy - 使用陣列進行向量化
- NumPy - 陣列的記憶體佈局
- Numpy 線性代數
- NumPy - 線性代數
- NumPy - 矩陣庫
- NumPy - 矩陣加法
- NumPy - 矩陣減法
- NumPy - 矩陣乘法
- NumPy - 元素級矩陣運算
- NumPy - 點積
- NumPy - 矩陣求逆
- NumPy - 行列式計算
- NumPy - 特徵值
- NumPy - 特徵向量
- NumPy - 奇異值分解
- NumPy - 求解線性方程組
- NumPy - 矩陣範數
- NumPy 元素級矩陣運算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位數
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合運算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 並集
- NumPy - 差集
- NumPy 有用資源
- NumPy 編譯器
- NumPy - 快速指南
- NumPy - 有用資源
- NumPy - 討論
NumPy - 陣列乘法
NumPy 陣列乘法
NumPy 陣列乘法是指逐元素相乘兩個陣列的過程。在此上下文中,逐元素乘法意味著一個數組中的每個元素都乘以另一個數組中對應的元素。
結果是一個新陣列,其中每個元素表示輸入陣列中對應元素的乘積。
NumPy 中的逐元素乘法
逐元素乘法,也稱為哈達瑪積,是 NumPy 中的一種運算,其中兩個形狀相同的陣列相乘,並且運算應用於每對對應的元素。
為了執行逐元素乘法,兩個陣列必須具有相同的形狀。如果陣列的形狀不同,則會應用廣播規則以使它們相容。
示例
在下面的示例中,我們將陣列a的每個元素乘以陣列b中對應的元素 -
import numpy as np # Creating two arrays a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # Performing element-wise multiplication result = a * b print(result)
以下是獲得的輸出 -
[ 4 10 18]
在 NumPy 中乘以標量
標量乘法是指將陣列的每個元素乘以單個標量值。陣列中的每個元素都乘以標量值,從而產生一個新陣列,其中所有元素都相應地縮放。
結果陣列的形狀與原始陣列相同,但每個元素都按標量縮放。
示例
在此示例中,我們將標量“3”乘以陣列“a”的每個元素 -
import numpy as np # Creating an array a = np.array([1, 2, 3]) # Multiplying by a scalar result = a * 3 print(result)
這將產生以下結果 -
[3 6 9]
乘以不同形狀的 NumPy 陣列
當乘以不同形狀的陣列時,NumPy 使用廣播使形狀與逐元素運算相容。廣播從最右側對齊維度,根據特定規則調整形狀,並順利執行運算。
示例
在下面的示例中,陣列“b”被廣播以匹配陣列“a”的形狀,然後執行逐元素乘法 -
import numpy as np # Creating arrays with different shapes a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30]) # Multiplying arrays with broadcasting result = a * b print(result)
以下是上述程式碼的輸出 -
[[10 40 90] [40 100 180]]
NumPy 中的矩陣乘法
矩陣乘法是線性代數中的一種運算,其中兩個矩陣根據特定規則相乘。在 NumPy 中,此運算使用np.dot()函式、@運算子或np.matmul()函式執行。
為了使矩陣乘法有效,第一個矩陣的列數必須等於第二個矩陣的行數。如果矩陣A的形狀為(m, n),而矩陣B的形狀為(n, p),則結果矩陣的形狀將為(m, p)。
示例:使用 numpy.dot() 函式
NumPy 中的 np.dot() 函式用於計算兩個陣列的點積。它處理 2D 陣列的矩陣乘法和 1D 陣列的點積 -
import numpy as np # Define two matrices matrix1 = np.array([[1, 2], [3, 4]]) matrix2 = np.array([[5, 6], [7, 8]]) # Perform matrix multiplication using np.dot result = np.dot(matrix1, matrix2) print(result)
獲得的輸出如下所示 -
[[19 22] [43 50]]
示例:使用“@”運算子
NumPy 中的@運算子為 np.dot() 函式提供了一種簡寫。它對 2D 陣列執行矩陣乘法,並用於計算 1D 陣列的點積 -
import numpy as np # Define the same matrices matrix1 = np.array([[1, 2], [3, 4]]) matrix2 = np.array([[5, 6], [7, 8]]) # Perform matrix multiplication using the @ operator result = matrix1 @ matrix2 print(result)
執行上述程式碼後,我們將獲得以下輸出 -
[[19 22] [43 50]]
示例:使用 np.matmul() 函式
np.matmul()函式可以透過對輸入陣列的最後兩個維度執行矩陣乘法來處理具有多個維度的陣列,並根據需要廣播任何前面的維度 -
import numpy as np # Define a 3D array and a 2D array array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) array_2d = np.array([[1, 0], [0, 1]]) # Perform matrix multiplication using np.matmul result = np.matmul(array_3d, array_2d) print(result)
產生的結果如下 -
[[[1 2] [3 4]] [[5 6] [7 8]]]
逐元素乘法與矩陣乘法
區分逐元素乘法(使用 *)和矩陣乘法(使用 @ 或 np.dot())非常重要 -
逐元素乘法 - 第一個陣列中的每個元素都乘以第二個陣列中對應的元素。
矩陣乘法 - 執行行和列的點積,遵循線性代數規則。
示例
在此示例中,我們重點介紹了逐元素乘法和矩陣乘法之間的區別 -
import numpy as np # Creating two 2D arrays a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) # Element-wise multiplication element_wise_result = a * b print("Element-wise multiplication:\n", element_wise_result) # Matrix multiplication matrix_result = np.dot(a, b) print("Matrix multiplication:\n", matrix_result)
我們得到如下所示的輸出 -
Element-wise multiplication: [[ 5 12] [21 32]] Matrix multiplication: [[19 22] [43 50]]
乘以具有不同資料型別的陣列
當在 NumPy 中乘以具有不同資料型別的陣列時,會應用型別強制規則以確保可以執行運算。此過程包括在執行乘法之前將陣列轉換為通用資料型別。
NumPy 使用一組提升規則來確定結果的資料型別。一般規則是將運算元轉換為可以容納結果而不會丟失精度的型別。以下是提升順序 -
Boolean → Integer → Floating-point → Complex.
例如,整數和浮點數被提升為浮點數型別以容納小數值。
示例
在這種情況下,NumPy 將整數陣列b提升為浮點型別以匹配陣列a的資料型別 -
import numpy as np # Creating arrays with different data types a = np.array([1.5, 2.5, 3.5]) b = np.array([2, 3, 4], dtype=np.int32) # Performing multiplication result = a * b print(result)
以下是獲得的輸出 -
[3. 7.5 14.]
處理乘法中的維度不匹配
當在 NumPy 中執行陣列之間的乘法運算時,如果陣列不共享相容的形狀,則可能發生維度不匹配。NumPy 透過廣播解決此問題,並在這種情況下引發ValueError。
示例
在下面的示例中,“a”和“b”的形狀不相容廣播,導致錯誤 -
import numpy as np # Creating arrays with incompatible shapes a = np.array([1, 2, 3]) b = np.array([[1, 2], [3, 4]]) # Attempting to multiply incompatible arrays result = a * b print(result)
產生的結果如下 -
Traceback (most recent call last):File "/home/cg/root/66a1de2fae52f/main.py", line 8, in <module>result = a * bValueError: operands could not be broadcast together with shapes (3,) (2,2)