NumPy - 陣列扁平化



扁平化 NumPy 陣列

NumPy 中的陣列扁平化是指將多維陣列轉換為一維陣列的過程,其中所有元素按順序排列。這意味著,無論陣列的維度是多少(無論是二維、三維還是更高維),扁平化都將其簡化為單個元素向量。

NumPy 提供了兩個函式,ndarray.flatten()ndarray.ravel(),兩者都用於扁平化陣列。

使用 flatten() 函式扁平化陣列

NumPy 中的 flatten() 函式用於將多維陣列轉換為一維陣列,也稱為扁平化。

它返回一個新陣列,該陣列包含原始陣列中的所有元素,以單行主序(C 樣式)序列排列。以下是語法:

arr.flatten(order='C')

其中,order 是一個可選引數,用於指定元素的順序。預設為 'C',表示行主序。

示例

在下面的示例中,我們使用 NumPy 中的 flatten() 函式將陣列“arr”扁平化為單行主序:

import numpy as np

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

# Flattening the array
flattened_arr = arr.flatten()

print("Original Array:")
print(arr)
print("\nFlattened Array:", flattened_arr)

獲得的輸出如下:

Original Array:
[[1 2 3]
 [4 5 6]]

Flattened Array: [1 2 3 4 5 6]

使用 ravel() 函式扁平化陣列

NumPy 中的 ravel() 函式用於從多維陣列建立一個扁平化的 1D 陣列。與 flatten() 函式不同,ravel() 函式在可能的情況下返回原始陣列的扁平化檢視,而不會建立副本。以下是語法:

arr.ravel(order='C')

示例

在下面的示例中,我們使用 ravel() 函式將一個 2D 陣列扁平化為一個 1D 陣列:

import numpy as np

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

# Flattening the array
raveled_arr = arr.ravel()

print("Original Array:")
print(arr)
print("\nRaveled Array:", raveled_arr)

上述程式碼的輸出如下:

Original Array:
[[1 2 3]
 [4 5 6]]

Raveled Array:[1 2 3 4 5 6]

Fortran 順序扁平化陣列

當您以 Fortran 順序扁平化多維陣列時,您將其轉換為一維陣列,其中元素排列方式就像您逐列讀取陣列一樣。

例如,如果您有一個維度為 (行, 列) 的 2D 陣列 A,則以 Fortran 順序扁平化它會將元素排列成這樣:您遍歷第一列的所有元素,然後移動到第二列,依此類推。

在 NumPy 中,您可以透過在 flatten() 函式中將 order 引數設定為 F 來以 Fortran 順序扁平化陣列。

示例

在這個例子中,我們使用 NumPy 中的 array.flatten() 函式以 Fortran 順序扁平化陣列“arr”:

import numpy as np

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

# Flatten in Fortran order
flattened_arr_fortran = arr.flatten(order='F')

print("Original Array:")
print(arr)
print("\nFlattened Array (Fortran order):",flattened_arr_fortran)

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

Original Array:
[[1 2 3]
 [4 5 6]]

Flattened Array (Fortran order):[1 4 2 5 3 6]

連線扁平化陣列

在 NumPy 中,您可以使用 numpy.concatenate() 函式連線扁平化陣列。以下是逐步操作方法:

  • 扁平化陣列 - 首先,您需要使用 flatten() 函式扁平化要連線的每個陣列。這會將每個多維陣列轉換為一維陣列。

  • 連線 - 然後,使用 numpy.concatenate() 函式將扁平化的陣列連線成一個數組。

連線是將多個數組組合成一個更大陣列的過程。當您連線扁平化陣列時,您主要是在一個接一個地追加每個扁平化陣列的元素,以建立一個更長的單個數組。

示例

在下面的示例中,我們首先使用 array.flatten() 函式扁平化 2D 陣列“arr1”和“arr2”。然後,我們使用 NumPy 中的 concatenate() 函式連線這些扁平化陣列:

import numpy as np

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

# Flatten arrays
flat_arr1 = arr1.flatten()
flat_arr2 = arr2.flatten()

# Concatenate flattened arrays
concatenated_arr = np.concatenate((flat_arr1, flat_arr2))

print("Flattened Array 1:")
print(flat_arr1)
print("\nFlattened Array 2:")
print(flat_arr2)
print("\nConcatenated Flattened Array:",concatenated_arr)

獲得的輸出如下所示:

Flattened Array 1:
[1 2 3 4]

Flattened Array 2:
[5 6 7 8]

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

用零初始化扁平化陣列

用零初始化扁平化陣列是一種建立一維陣列的方法,其中所有元素都設定為零。

NumPy 提供了一個函式 numpy.zeros_like(),用於建立一個與給定陣列具有相同形狀和型別的零陣列。以下是語法:

numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)

其中,

  • a - 輸入陣列。

  • dtype (可選) - 指定輸出陣列的資料型別。如果未提供,則使用 a 的資料型別。

  • order (可選) - 指定結果的記憶體佈局順序('C' 表示行主序,'F' 表示列主序,'A' 表示任意,'K' 表示保持,預設為 'C')。

  • subok (可選) - 如果為 True,則子類將被傳遞,否則,返回的陣列將強制為基類陣列(預設為 False)。

  • shape (可選) - 輸出陣列的形狀。如果沒有給出,則預設為 a.shape。

示例

在這個例子中,我們建立了一個用特定值初始化的 2D NumPy 陣列“arr”。然後我們將“arr”扁平化為一個 1D 陣列,並用零初始化“flattened_zeros”:

import numpy as np

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

# Flattening and initializing with zeros
flattened_zeros = np.zeros_like(arr.flatten())

print("Original Array:")
print(arr)
print("\nFlattened Array with Zeros:",flattened_zeros)

產生的結果如下:

Original Array:
[[1 2]
 [3 4]]

Flattened Array with Zeros: [0 0 0 0]

查詢扁平化陣列中的最大值

查詢扁平化陣列中的最大值意味著確定多維陣列的一維表示中最大的元素。

在 NumPy 中,您可以使用 numpy.max() 函式查詢陣列中的最大值。當應用於扁平化陣列時,此函式返回該陣列中存在的最高值。以下是語法:

numpy.max(a, axis=None, out=None, keepdims=False, initial=None, where=True)

其中,

  • a - 要計算最大值的輸入陣列。

  • axis (可選) - 指定要操作的軸。預設為 "None",返回扁平化陣列的最大值。

  • out (可選) - 結果儲存的輸出陣列。如果提供,則其形狀和緩衝區長度必須與預期的輸出相同。

示例

在下面的示例中,我們使用 numpy.max() 函式查詢扁平化陣列中的最大值:

import numpy as np

# array
arr = np.array([[1, 2],
                [3, 4]])

# Flatten array
flattened_arr = arr.flatten()

# Find maximum value
max_value = np.max(flattened_arr)

print("Original Array:")
print(arr)
print("\nFlattened Array:")
print(flattened_arr)
print("\nMaximum Value in Flattened Array:",max_value)

我們得到如下所示的輸出:

Original Array:
[[1 2]
 [3 4]]

Flattened Array:
[1 2 3 4]

Maximum Value in Flattened Array:4
廣告