
- 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 陣列意味著改變其形狀,即修改每個維度上的元素數量,同時保持元素總數不變。換句話說,新形狀中維度的乘積必須等於原始形狀中維度的乘積。
例如,形狀為 (6,) 的陣列可以重塑為 (2, 3) 或 (3, 2),但不能重塑為 (2, 2),因為 6 個元素無法放入 2x2 的陣列中。
將一維陣列重塑為二維陣列
我們可以使用 NumPy 中的 reshape() 函式將一維陣列重塑為二維陣列。這用於將線性資料組織成矩陣形式。
reshape() 函式改變現有陣列的形狀而不改變其資料。以下是語法:
numpy.reshape(array, newshape)
其中:
array − 你想要重塑的陣列。
newshape − 你想要賦予陣列的形狀。它可以是整數或整數元組。一個維度可以是 -1,這意味著它將根據陣列的長度和其餘維度推斷出來。
示例:基本的重塑
在下面的示例中,我們使用 reshape() 函式將具有 6 個元素的一維陣列“arr”重塑為二維陣列:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5, 6]) # Reshape to 2-D array reshaped_arr = arr.reshape((2, 3)) print("1-D to 2-D Array (2x3):") print(reshaped_arr)
獲得的輸出如下:
1-D to 2-D Array (2x3): [[1 2 3] [4 5 6]]
示例:重塑的實際用例
假設你有一組班級學生的考試成績列表,並且想要將它們組織成一個表格,其中每一行代表一個學生,每一列代表不同的考試。你可以透過將一維成績陣列重塑為二維陣列來實現這一點:
import numpy as np # Original 1-D array of test scores scores = np.array([85, 90, 78, 92, 88, 76]) # Reshape into a 2-D array where each row is a student's scores scores_matrix = scores.reshape((2, 3)) print("Scores Matrix (2 students, 3 tests each):") print(scores_matrix)
這將產生以下結果:
Scores Matrix (2 students, 3 tests each): [[85 90 78] [92 88 76]]
將一維陣列重塑為三維陣列
我們也可以使用 reshape() 函式將一維陣列重塑為 NumPy 中的三維陣列。這有助於你表示更復雜的結構資料,例如多通道影像(例如 RGB 影像)、不同通道的時間序列資料或體資料。
示例
在這個示例中,我們使用 reshape() 函式將具有 12 個元素的一維陣列“arr”重塑為三維陣列:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) # Reshape to 3-D array reshaped_arr = arr.reshape((2, 2, 3)) print("1-D to 3-D Array (2x2x3):") print(reshaped_arr)
上述程式碼的輸出如下:
1-D to 3-D Array (2x2x3): [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]]
將 N 維陣列重塑為一維陣列
在 NumPy 中將 N 維 (N-D) 陣列重塑為一維 (1-D) 陣列是將多維陣列展平或摺疊成單個線性陣列的過程。我們也可以使用 reshape() 函式來實現這一點。
將複雜的多分量陣列展平為一維格式簡化了某些資料處理任務,並使資料更容易處理和分析。
示例
在下面的示例中,我們使用帶有 -1 引數的 reshape() 函式將形狀為 (2, 3) 的二維陣列“arr”重塑為一維陣列:
import numpy as np # Original 2-D array arr = np.array([[1, 2, 3], [4, 5, 6]]) # Reshape to 1-D array reshaped_arr = arr.reshape(-1) print("Reshaped Array:", reshaped_arr)
獲得的輸出如下:
Reshaped Array:[1 2 3 4 5 6]
重塑維度未知的陣列
你可以使用 NumPy 中的 reshape() 函式重塑維度未知的陣列。透過將-1作為引數傳遞給 reshape() 函式,NumPy 會根據陣列中的元素總數和其他指定的維度自動計算該維度的尺寸。
這有助於你重塑陣列,而無需顯式計算每個維度的確切大小。
示例
在下面的示例中,我們使用 reshape() 函式將具有 12 個元素的一維陣列 arr 重塑為三維陣列,並將其中一個維度指定為“-1”:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) # Reshape to 3-D array with one unknown dimension reshaped_arr = arr.reshape((2, 2, -1)) print("Reshaped Array with Unknown Dimension:") print(reshaped_arr)
執行上述程式碼後,我們將獲得以下輸出:
Reshaped Array with Unknown Dimension: [[[ 1 2 3] [ 4 5 6]][[ 7 8 9] [10 11 12]]]
重塑陣列時出現錯誤
在 NumPy 中重塑陣列有時會導致錯誤,尤其是在元素總數與指定維度的乘積不匹配時。務必確保新形狀與陣列中的元素數量相容。
重塑陣列時的常見錯誤
以下是 NumPy 中重塑陣列時最常見的錯誤:
ValueError: 新陣列的總大小必須保持不變 − 當原始陣列中的元素數量與為重塑指定的維度的乘積不匹配時,將發生此錯誤。
例如,嘗試將 10 個元素的一維陣列重塑為 3x3 矩陣 (reshape((3, 3))) 將引發此錯誤,因為 3 × 3 = 9 與 10 不同。
ValueError: 無法將大小為 X 的陣列重塑為形狀 (Y, Z) − 此錯誤表明原始陣列大小 (X) 與指定的形狀 (Y, Z) 不相容。
例如,嘗試將大小為 10 的一維陣列重塑為 2x5 矩陣 (reshape((2, 5))) 將引發此錯誤,因為 2 × 5 = 10,但陣列需要是二維的才能適合新形狀。
TypeError: 'numpy.ndarray' 物件無法解釋為整數 − 當為重塑提供的維度不是整數或指定不正確時,將發生此錯誤。確保傳遞給 reshape() 函式的所有維度都是有效的整數,並且它們正確地表示新形狀。
處理重塑陣列時的錯誤
以下是處理 NumPy 中重塑陣列時出現的錯誤的方法:
檢查陣列大小 在重塑之前,使用 array.size() 函式驗證原始陣列的大小,並確保它與新形狀維度的乘積匹配。
對未知維度使用 -1 重塑時,如果一個維度未知,請使用 -1 讓 NumPy 根據陣列中的元素總數和其它指定的維度自動計算它。
捕獲異常 將你的重塑程式碼包裝在 try-except 塊中,以捕獲潛在的錯誤並優雅地處理它們。這可以防止你的程式崩潰,並允許進行適當的錯誤訊息或回退操作。
示例
在下面的示例中,我們嘗試將具有 5 個元素的一維陣列“arr”重塑為“2x3”二維陣列,這將導致 ValueError,因為元素總數與指定的形狀不匹配:
import numpy as np # Original 1-D array arr = np.array([1, 2, 3, 4, 5]) try: # Attempt to reshape to an incompatible shape reshaped_arr = arr.reshape((2, 3)) except ValueError as e: print("Error Occurred During Reshaping:") print(e)
獲得的錯誤如下:
Error Occurred During Reshaping: cannot reshape array of size 5 into shape (2,3)