
- 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 使用廣播來對齊它們,從而可以輕鬆地進行元素級運算。
廣播規則
為了使廣播起作用,必須滿足以下規則:
- 如果陣列具有不同的維度數,則較小維度陣列的形狀將在左側填充 1,直到兩個形狀具有相同的長度。
- 每個維度的尺寸必須相同,或者其中一個必須為 1。
- 廣播從最後一個維度應用到第一個維度。
例如,考慮兩個形狀為(3, 4)和(4,)的陣列。廣播規則將如下對齊形狀:
填充較小陣列的形狀:較小陣列的形狀 (4,) 被填充為 (1, 4)。
對齊維度:形狀 (3, 4) 和 (1, 4) 分別對齊為 (3, 4) 和 (3, 4)。
執行元素級運算:運算應用於對齊的形狀。
向陣列新增標量
當向陣列新增標量時,NumPy 使用廣播將標量應用於陣列的每個元素。廣播擴充套件標量以匹配陣列的形狀,從而實現元素級運算。
示例
在以下示例中,我們將標量“10”廣播到陣列的每個元素,導致每個元素增加 10:
import numpy as np # Creating an array array = np.array([[1, 2, 3], [4, 5, 6]]) # Adding a scalar result = array + 10 print(result)
以下是獲得的輸出:
[[11 12 13][14 15 16]]
新增不同形狀的陣列
當新增不同形狀的陣列時,NumPy 應用廣播規則使它們的形狀相容。廣播透過將較小陣列擴充套件到較大陣列上起作用,以便兩個陣列具有相同的形狀以進行元素級加法。
此過程無需在執行運算之前手動重新整形陣列。
示例 1
在此示例中,我們將第二個陣列“array2”廣播以匹配第一個陣列“array1”的形狀:
import numpy as np # Creating two arrays with different shapes array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([10, 20, 30]) # Adding arrays with broadcasting result = array1 + array2 print(result)
這將產生以下結果:
[[11 22 33] [14 25 36]]
示例 2
以下是另一個在 NumPy 中廣播兩個不同形狀陣列的示例:
import numpy as np a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) b = np.array([1.0,2.0,3.0]) print ('First array:') print (a) print ('\n') print ('Second array:') print (b) print ('\n') print ('First Array + Second Array') print (a + b)
此程式的輸出如下:
First array: [[ 0. 0. 0.] [10. 10. 10.] [20. 20. 20.] [30. 30. 30.]] Second array: [1. 2. 3.] First Array + Second Array [[ 1. 2. 3.] [11. 12. 13.] [21. 22. 23.] [31. 32. 33.]]
下圖演示瞭如何廣播陣列b以使其與a相容。

使用多維陣列進行廣播
在對具有不同形狀的多維陣列執行運算時,廣播規則會對齊它們的維度,以便可以對它們進行元素級運算。
此過程涉及擴充套件較小陣列以匹配較大陣列的形狀,從而可以順利地執行運算。
示例
在以下示例中,我們建立了兩個 3D 陣列,然後使用廣播將它們相加:
import numpy as np # Creating two 3D arrays array1 = np.ones((2, 3, 4)) array2 = np.arange(4) # Adding arrays with broadcasting result = array1 + array2 print(result)
以下是上述程式碼的輸出:
[[[1. 2. 3. 4.] [1. 2. 3. 4.] [1. 2. 3. 4.]] [[1. 2. 3. 4.] [1. 2. 3. 4.] [1. 2. 3. 4.]]]
使用廣播應用函式
廣播不僅簡化了不同形狀陣列之間的算術運算,還允許跨陣列應用函式。這些函式可以包括:
數學函式:執行數學運算的函式,例如加法、減法、乘法和除法。
統計函式:計算統計屬性的函式,如平均值、中位數、方差和標準差。
歸約函式:透過執行求和、乘積或最大值等運算來減少陣列維度的函式。
邏輯運算:執行邏輯運算的函式,例如比較和邏輯運算(例如,AND、OR、NOT)。
在將函式應用於不同形狀的陣列時,廣播確保函式按元素進行應用。
示例
在此示例中,我們使用 numpy.maximum() 函式對兩個陣列執行元素級比較。該函式將“array1”的每個元素與“array2”的對應元素進行比較,結果是一個數組,其中每個元素是輸入陣列中對應元素的最大值:
import numpy as np # Creating arrays array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([[10], [20]]) # Applying a function with broadcasting result = np.maximum(array1, array2) print(result)
執行上述程式碼後,我們將獲得以下輸出:
[[10 10 10] [20 20 20]]