
- 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 提供了多個函式用於沿不同軸連線陣列,它們是:
- np.concatenate() 函式
- np.stack() 函式
- np.hstack() 函式
- np.vstack() 函式
使用 concatenate() 函式
NumPy 的 concatenate() 函式沿指定的軸連線一系列陣列。除了要連線的軸對應的維度外,這些陣列必須具有相同的形狀。以下是基本語法:
np.concatenate((array1, array2, ...), axis=0)
其中,
- array1, array2, ... − 要連線的陣列序列。除了由 axis 指定的一個軸外,這些陣列沿所有軸都應該具有相同的形狀。
- axis − 沿其連線陣列的軸。預設值為 0,表示沿行連線陣列(對於二維陣列)。
示例:連線一維陣列
在下面的示例中,我們沿預設軸(axis 0)連線兩個一維陣列“array1”和“array2”:
import numpy as np # Create two 1D arrays array1 = np.array([1, 2, 3]) array2 = np.array([4, 5, 6]) # Concatenate along the default axis (axis=0) result = np.concatenate((array1, array2)) print("Concatenated Array:", result)
生成的陣列是一個包含兩個輸入陣列所有元素的單個一維陣列:
Concatenated Array: [1 2 3 4 5 6]
示例:沿不同軸連線二維陣列
在這裡,我們使用 concatenate() 函式沿不同的軸連線兩個二維陣列:
import numpy as np # Create two 2D arrays array1 = np.array([[1, 2], [3, 4]]) array2 = np.array([[5, 6], [7, 8]]) # Concatenate along axis 0 (row-wise) result_axis_0 = np.concatenate((array1, array2), axis=0) print("Concatenated along Axis 0:\n", result_axis_0) # Concatenate along axis 1 (column-wise) result_axis_1 = np.concatenate((array1, array2), axis=1) print("Concatenated along Axis 1:\n", result_axis_1)
獲得的輸出如下:
Concatenated along Axis 0: [[1 2] [3 4] [5 6] [7 8]] Concatenated along Axis 1: [[1 2 5 6] [3 4 7 8]]
示例:連線不同維度的陣列
在這裡,我們將一維陣列“array1”重塑為具有給定形狀的二維陣列,使其能夠沿軸“0”與二維陣列“array2”連線:
import numpy as np # Create a 1D and a 2D array array1 = np.array([1, 2, 3]) array2 = np.array([[4, 5, 6], [7, 8, 9]]) # Reshape array1 to make it 2D for concatenation along axis 0 array1_reshaped = array1.reshape(1, -1) # Concatenate along axis 0 result = np.concatenate((array1_reshaped, array2), axis=0) print("Concatenated Array:\n", result)
這將產生以下結果:
Concatenated Array: [[1 2 3] [4 5 6] [7 8 9]]
使用 stack() 函式堆疊陣列
NumPy 的 stack() 函式沿一個新的軸連線一系列陣列,這個軸由你指定。當需要保留陣列的原始維度同時新增一個新軸進行堆疊時,此函式非常有用。以下是語法:
np.stack((array1, array2, ...), axis=0)
其中,
- array1, array2, ... − 要堆疊的陣列序列。這些陣列必須具有相同的形狀。
- axis − 沿其堆疊陣列的軸。預設值為 0,表示沿新的第一個軸堆疊陣列。
示例:堆疊二維陣列
在下面的示例中,我們沿新的第三軸堆疊兩個二維陣列。這將建立一個具有特定形狀的三維陣列:
import numpy as np # Create two 2D arrays array1 = np.array([[1, 2], [3, 4]]) array2 = np.array([[5, 6], [7, 8]]) # Stack along a new third axis (axis 2) stacked_array = np.stack((array1, array2), axis=2) print("Stacked Array along Axis 2:\n", stacked_array) print("Shape of Stacked Array:", stacked_array.shape)
新維度表示陣列的深度,其中來自原始陣列的對應元素堆疊在一起:
Stacked Array along Axis 2: [[[1 5] [2 6]] [[3 7] [4 8]]] Shape of Stacked Array: (2, 2, 2)
示例:堆疊多個數組
在這個例子中,三個一維陣列使用 stack() 函式沿新的第一個軸堆疊:
import numpy as np # Create three 1D arrays array1 = np.array([1, 2, 3]) array2 = np.array([4, 5, 6]) array3 = np.array([7, 8, 9]) # Stack along the first axis (new axis 0) stacked_array = np.stack((array1, array2, array3), axis=0) print("Stacked Array:\n", stacked_array) print("Shape of Stacked Array:", stacked_array.shape)
結果是一個二維陣列,其中每個原始陣列構成新陣列中的一行:
Stacked Array: [[1 2 3] [4 5 6] [7 8 9]] Shape of Stacked Array: (3, 3)
使用 hstack() 函式進行水平堆疊
NumPy 的 hstack() 函式按順序水平(列式)堆疊陣列。這意味著陣列沿它們的第二維(二維陣列的 axis 1)連線。對於一維陣列,它們只是沿著單個可用軸連線。
以下是語法:
np.hstack((array1, array2, ...))
其中,array1, array2, ... 是要水平堆疊的陣列序列。所有陣列除了第二個軸外,沿所有軸都必須具有相同的形狀。
示例
在下面的示例中,我們將兩個二維陣列“array1”和“array2”水平堆疊,得到一個新陣列,其中“array2”的列放在“array1”的列右側:
import numpy as np # Create two 2D arrays array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([[7, 8, 9], [10, 11, 12]]) # Horizontally stack the arrays hstacked_array = np.hstack((array1, array2)) print("Horizontally Stacked 2D Array:\n", hstacked_array)
以上程式碼的輸出如下:
Horizontally Stacked 2D Array: [[ 1 2 3 7 8 9] [ 4 5 6 10 11 12]]
使用 vstack() 函式進行垂直堆疊
NumPy 的 vstack() 函式按順序垂直(行式)堆疊陣列。這意味著陣列沿它們的第一個維度(二維陣列的 axis 0)連線。對於一維陣列,它們被視為行並彼此堆疊,從而產生一個二維陣列。
以下是語法:
np.vstack((array1, array2, ...))
其中,array1, array2, ... 是要垂直堆疊的陣列序列。所有陣列除了第一個軸外,沿所有軸都必須具有相同的形狀。
示例
在下面的示例中,我們將兩個二維陣列“array1”和“array2”垂直堆疊,得到一個新陣列,其中“array2”的行放在“array1”的行下方:
import numpy as np # Create two 2D arrays array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([[7, 8, 9], [10, 11, 12]]) # Vertically stack the arrays vstacked_array = np.vstack((array1, array2)) print("Vertically Stacked 2D Array:\n", vstacked_array)
獲得的輸出如下所示:
Vertically Stacked 2D Array: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
連線後分割陣列
連線陣列後,您可能希望將其分割回原始部分或不同形狀的部分。NumPy 提供了多個用於分割陣列的函式:
- np.split() 函式 − 根據索引或部分將陣列分割成多個子陣列。
- np.array_split() 函式 − 類似於 np.split() 函式,但允許分割成不相等的子陣列。
- np.hsplit() 函式 − 水平(列式)分割陣列。
- np.vsplit() 函式 − 垂直(行式)分割陣列。
- np.dsplit() 函式 − 沿第三軸(深度方向)分割陣列,用於三維陣列。
陣列分割是將陣列分成多個子陣列的過程。此操作是陣列連線的反向操作。
示例
在下面的示例中,我們使用 np.vsplit() 函式將垂直堆疊的陣列分成兩等份,有效地反轉了垂直堆疊操作:
import numpy as np # Vertically stack two arrays array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([[7, 8, 9], [10, 11, 12]]) vstacked_array = np.vstack((array1, array2)) # Split the array back into the original arrays split_arrays = np.vsplit(vstacked_array, 2) print("Split Arrays:") for arr in split_arrays: print(arr)
執行上述程式碼後,我們得到以下輸出:
Split Arrays: [[1 2 3] [4 5 6]] [[ 7 8 9] [10 11 12]]