在 NumPy 中獲取兩個陣列的組合

Muhammad Maisam Abbas 2023年1月30日
  1. 使用 Python 中的 itertools.product() 函式獲取 NumPy 陣列組合
  2. 使用 Python 中的 numpy.meshgrid() 函式獲取 NumPy 陣列組合
  3. 使用 Python 中的 for-in 方法獲取 NumPy 陣列組合
在 NumPy 中獲取兩個陣列的組合

本文將介紹如何在 Python 中求兩個 NumPy 陣列的笛卡爾積。

使用 Python 中的 itertools.product() 函式獲取 NumPy 陣列組合

itertools 包提供了許多與組合和排列相關的功能。我們可以使用兩個可迭代物件的 itertools.product() 函式 笛卡爾積。itertools.product() 函式將可迭代物件作為輸入引數,並返回可迭代物件的笛卡爾積。

import itertools as it
import numpy as np

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

combinations = it.product(array, array)

for combination in combinations:
    print(combination)

輸出:

(1, 1)
(1, 2)
(1, 3)
(2, 1)
(2, 2)
(2, 3)
(3, 1)
(3, 2)
(3, 3)

在上面的程式碼中,我們通過使用 itertools 包內的 product() 函式計算了 array 與其自身的笛卡爾叉積,並將結果儲存在 combinations 中。

使用 Python 中的 numpy.meshgrid() 函式獲取 NumPy 陣列組合

我們還可以使用 NumPy 包中的 meshgrid() 函式 來計算兩個 NumPy 陣列的笛卡爾積。numpy.meshgrid() 函式將陣列作為輸入引數並返回兩個陣列的叉積。

import numpy as np

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

combinations = np.array(np.meshgrid(array, array)).T.reshape(-1, 2)
print(combinations)

輸出:

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

在上面的程式碼中,我們使用 NumPy 中的 meshgrid() 函式計算了 array 與其自身的笛卡爾叉積。然後,我們使用 np.array() 函式將此操作的結果轉換為一個陣列,並使用 numpy.reshape() 函式對其進行整形。然後我們將新的重塑結果儲存在 combinations 陣列中。

使用 Python 中的 for-in 方法獲取 NumPy 陣列組合

實現與前兩個示例相同的目標的另一種更直接的方法是使用 for-in 迭代器。for-in 迭代器用於迭代 Python 中可迭代物件內的每個元素。無需匯入任何新包或庫即可使用此方法。

import numpy as np

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

array2 = np.array([1, 2, 3])

combinations = np.array([(i, j) for i in array for j in array2])
print(combinations)

輸出:

[[1 1]
 [1 2]
 [1 3]
 [2 1]
 [2 2]
 [2 3]
 [3 1]
 [3 2]
 [3 3]]

我們在上面的程式碼中使用巢狀的 for-in 迭代器計算了兩個陣列的笛卡爾叉積。我們使用 np.array() 函式將結果儲存在 NumPy 陣列 combinations 中。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn