在 NumPy 中获取两个数组的组合

Muhammad Maisam Abbas 2023年1月30日 2021年7月4日
  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