NumPy - 陣列連線



連線 NumPy 陣列

連線 NumPy 陣列是指跨不同維度和軸線組合兩個或多個數組以建立一個新陣列。這對於根據需要垂直(沿行)或水平(沿列)組合陣列非常有用。

可以使用 NumPy 模組中提供的 concatenate() 函式在 Numpy 中連線陣列。

concatenate() 函式

NumPy 中的 concatenate() 函式用於沿指定軸連線(組合)陣列。它允許你根據提供的 axis 引數沿行或列組合陣列。以下是語法:

numpy.concatenate((a1, a2, ...), axis=0, out=None)

其中,

  • a1, a2, ... − 這些是要連線的陣列序列。這些陣列除了由 axis 指定的軸之外,必須在所有軸上具有相同的形狀。預設為 0(沿行)。使用 1 沿列連線。

  • axis − 指定沿哪個軸連線陣列。

  • out(可選)− 這允許你指定一個輸出陣列,連線結果將儲存在其中。

沿行連線陣列

在 NumPy 中沿行連線陣列意味著垂直堆疊陣列,將一個數組放在另一個數組的頂部以建立一個更大的陣列。這對於組合資料集或垂直擴充套件資料很有用。

在 NumPy 中,可以使用 numpy.concatenate() 函式並將“axis”引數設定為“0”來實現此目的。

示例

在以下示例中,我們使用 numpy.concatenate() 函式沿行連線兩個 NumPy 陣列“arr1”和“arr2”:

import numpy as np

arr1 = np.array([[1, 2, 3],
                 [4, 5, 6]])

arr2 = np.array([[7, 8, 9],
                 [10, 11, 12]])

# Concatenate along rows
concatenated_arr = np.concatenate((arr1, arr2), axis=0)
print("Concatenated Array along rows:",concatenated_arr)

獲得以下輸出:

Concatenated Array along rows:
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

沿列連線陣列

我們還可以透過水平堆疊陣列在 NumPy 中沿列連線陣列,將一個數組放在另一個數組旁邊以水平擴充套件資料。這對於組合資料集很有用,其中每個陣列表示需要連線的資料列。

在 NumPy 中,可以使用 numpy.concatenate() 函式並將“axis”引數設定為“1”來實現此目的。

示例

在下面的示例中,我們使用 numpy.concatenate() 函式沿列連線兩個 NumPy 陣列“arr1”和“arr2”:

import numpy as np

# Create two arrays
arr1 = np.array([[1, 2],
                 [3, 4]])

arr2 = np.array([[5, 6],
                 [7, 8]])

# Concatenate along columns 
concatenated_arr = np.concatenate((arr1, arr2), axis=1)
print("Concatenated Array along columns:")
print(concatenated_arr)

這將產生以下結果:

Concatenated Array along columns:
[[1 2 5 6]
 [3 4 7 8]]

連線具有混合維度的陣列

在 NumPy 中連線具有混合維度的陣列涉及組合最初具有不同形狀的陣列。

為了實現這一點,我們使用廣播技術來調整陣列的形狀,以便它們與連線相容。這涉及擴充套件較小陣列的維度以沿連線軸與較大陣列匹配。

在 NumPy 中,可以使用 np.reshape()、np.expand_dims() 和切片等函式調整陣列的維度。

示例:連線 1D 陣列和 2D 陣列

讓我們考慮連線一個 1D 陣列和一個 2D 陣列。1D 陣列將沿適當的維度擴充套件以匹配 2D 陣列:

import numpy as np

# Create a 1D array
arr1 = np.array([1, 2, 3])

# Create a 2D array
arr2 = np.array([[4, 5, 6],
                 [7, 8, 9]])

# Expand dimensions of the 1D array to match the 2D array for concatenation along rows
expanded_arr1 = np.expand_dims(arr1, axis=0)

# Concatenate along rows (axis=0)
concatenated_arr = np.concatenate((expanded_arr1, arr2), axis=0)
print("Concatenated Array with Mixed Dimensions along rows:")
print(concatenated_arr)

以上程式碼的輸出如下:

Concatenated Array with Mixed Dimensions along rows:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
 

示例:連線 2D 陣列和 3D 陣列

如果你有更多維度的陣列,你可以類似地擴充套件它們的維度以相互匹配。例如,連線 2D 陣列和 3D 陣列涉及擴充套件 2D 陣列的維度:

import numpy as np

# Create a 2D array
arr1 = np.array([[1, 2],
                 [3, 4]])

# Create a 3D array
arr2 = np.array([[[5, 6],
                  [7, 8]],
                 
                 [[9, 10],
                  [11, 12]]])

# Expand dimensions of the 2D array to match the 3D array for concatenation along the third dimension (axis=2)
expanded_arr1 = np.expand_dims(arr1, axis=2)

# Concatenate along the third dimension (axis=2)
concatenated_arr = np.concatenate((expanded_arr1, arr2), axis=2)
print("Concatenated Array with Mixed Dimensions along axis=2:")
print(concatenated_arr)

獲得的輸出如下所示:

Concatenated Array with Mixed Dimensions along axis=2:
[[[ 1  5  6]
  [ 2  7  8]]

 [[ 3  9 10]
  [ 4 11 12]]]

沿特定軸連線陣列

你可以使用 concatenate() 函式的 axis 引數沿“0”和“1”以外的軸連線陣列。此引數確定將沿哪個維度連線陣列。透過更改 axis 的值,你可以控制陣列是沿行、列還是更高維度連線。

對於具有兩個以上維度的陣列,你可以指定更高的軸進行連線。例如,沿第三軸(axis=2)連線涉及沿其深度組合陣列。

示例

在以下示例中,我們沿第三維度連線兩個 3D 陣列:

import numpy as np

# 3D arrays
arr1 = np.array([[[1, 2],
                  [3, 4]],
                 
                 [[5, 6],
                  [7, 8]]])

arr2 = np.array([[[9, 10],
                  [11, 12]],
                 
                 [[13, 14],
                  [15, 16]]])

# Concatenate along the third dimension (axis=2)
result = np.concatenate((arr1, arr2), axis=2)
print("Concatenated along third dimension:")
print(result)

執行以上程式碼後,我們將獲得以下輸出:

Concatenated along third dimension:
[[[ 1  2  9 10]
  [ 3  4 11 12]]

 [[ 5  6 13 14]
  [ 7  8 15 16]]]

使用 stack() 函式連線陣列

NumPy stack() 函式也可用於沿新軸連線陣列。與 numpy.concatenate() 沿現有軸連線陣列不同,numpy.stack() 會新增一個額外的維度,在結果中建立一個新軸。以下是語法:

numpy.stack(arrays, axis=0)

其中,

  • arrays − 要堆疊的陣列序列。所有陣列必須具有相同的形狀。

  • axis − 沿哪個軸堆疊陣列。預設為 0。

示例

在下面的示例中,我們使用 NumPy stack() 函式沿新的第三軸(axis=2)堆疊兩個 2D 陣列:

import numpy as np

# Example 2D arrays
arr1 = np.array([[1, 2],
                 [3, 4]])

arr2 = np.array([[5, 6],
                 [7, 8]])

# Stack along a new third axis 
result = np.stack((arr1, arr2), axis=2)
print("Stacked along a new axis:")
print(result)

產生的結果如下:

Stacked along a new axis:
[[[1 5]
  [2 6]]

 [[3 7]
  [4 8]]]
廣告