NumPy - 陣列的並集



NumPy 中的陣列並集

NumPy 中的陣列並集是指將多個數組合併成一個數組,同時去除重複元素。這確保每個元素在陣列中只出現一次。在 NumPy 中,我們可以使用union1d()函式來實現這一點。

NumPy 中的陣列並集類似於集合論中的並集運算,其中來自多個集合的所有唯一元素都被組合成一個集合。

使用 union1d() 函式

NumPy 中的 np.union1d() 函式用於計算兩個陣列的並集。此函式返回一個排序後的唯一值陣列,這些值存在於任一輸入陣列中。以下是語法 -

numpy.union1d(arr1, arr2)

其中,

  • arr1 -它是第一個輸入陣列。此陣列可以是任何形狀或資料型別,但通常為簡單起見為 1D 陣列。
  • arr2 -它是第二個輸入陣列。它應該與“arr1”具有相同的資料型別。

示例

在以下示例中,我們使用 union1d() 函式查詢 2 個數組“arr1”和“arr2”的並集 -

import numpy as np

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

# Compute the union of the two arrays
union_result = np.union1d(arr1, arr2)
print("Union of two arrays:", union_result)

獲得以下輸出 -

Union of two arrays: [1 2 3 4 5 6]

多個數組的並集

要查詢兩個以上陣列的並集,您可以多次使用 union1d() 函式。這涉及迭代地將函式應用於陣列對,直到所有陣列都包含在並集中。

或者,您可以使用 np.concatenate() 和 np.unique() 等函式。以下是語法 -

numpy.concatenate((array1, array2, ...))
numpy.unique(array)

示例:順序並集

在下面的示例中,我們使用 union1d() 函式迭代地查詢 3 個數組的並集 -

import numpy as np

# Define multiple 1D arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([2, 3, 4])
arr3 = np.array([4, 5, 6])

# Compute the union of three arrays
# Union of first two arrays
union_temp = np.union1d(arr1, arr2)  
# Union with the third array
union_result = np.union1d(union_temp, arr3) 

print("Union of multiple arrays (sequential):", union_result)

這將產生以下結果 -

Union of multiple arrays (sequential): [1 2 3 4 5 6]

示例:使用 np.concatenate() 和 np.unique() 函式

在此示例中,我們首先將所有陣列連線到一個數組中。然後,我們使用 unique() 函式從該連線陣列中提取唯一元素 -

import numpy as np

# Define multiple 1D arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([2, 3, 4])
arr3 = np.array([4, 5, 6])

# Concatenate all arrays into one
concatenated_array = np.concatenate((arr1, arr2, arr3))

# Find unique elements
union_result = np.unique(concatenated_array)

print("Union of multiple arrays (concatenate and unique):", union_result)

以上程式碼的輸出如下 -

Union of multiple arrays (concatenate and unique): [1 2 3 4 5 6]

處理多維陣列

我們還可以對多維陣列應用並集運算。要對多維陣列執行並集運算,您需要先展平陣列。

展平將多維陣列轉換為 1D 陣列,允許您執行並集運算,就像陣列是一維的一樣。在執行並集運算後,如果需要,您可以將結果重新整形回原始維度。

在 NumPy 中,多維陣列是具有多個維度的陣列。它們通常被稱為“ndarrays”,用於表示複雜的資料結構,如矩陣或更高維度的張量。

管理這些陣列涉及理解它們的結構、執行操作以及有效地操作資料。

示例

在此示例中,我們首先定義兩個 2D 陣列“arr1”和“arr2”。然後,我們使用 flatten() 函式將其展平為 1d 陣列,然後計算它們的並集 -

import numpy as np

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

# Flatten the arrays and compute the union
flattened_arr1 = arr1.flatten()
flattened_arr2 = arr2.flatten()
union_result = np.union1d(flattened_arr1, flattened_arr2)

print("Union of 2D arrays:", union_result)

獲得的輸出如下所示 -

Union of 2D arrays: [1 2 3 4 5 6]

具有複雜資料型別的並集

NumPy 中具有複雜資料型別的並集運算涉及處理具有結構化或面向物件資料的陣列。與簡單的數字陣列不同,複雜的資料型別可以包含諸如整數、浮點數、字串,甚至其他陣列之類的欄位。

np.union1d() 函式可以處理任何資料型別的陣列,只要它們是可以比較的。

示例

在以下示例中,我們首先建立 2 個結構化陣列,然後使用 union1d() 函式將它們組合起來,刪除重複項並保留唯一條目 -

import numpy as np

# Define structured arrays
arr1 = np.array([(1, 'a'), (2, 'b')], dtype=[('num', 'i4'), ('letter', 'S1')])
arr2 = np.array([(2, 'b'), (3, 'c')], dtype=[('num', 'i4'), ('letter', 'S1')])

# Compute the union of structured arrays
union_result = np.union1d(arr1, arr2)
print("Union of structured arrays:", union_result)

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

Union of structured arrays: [(1, b'a') (2, b'b') (3, b'c')]
廣告