NumPy で 2つの配列の組み合わせを取得する

Muhammad Maisam Abbas 2023年1月30日
  1. Python の itertools.product() 関数で NumPy 配列の組み合わせを取得する
  2. Python の numpy.meshgrid() 関数で NumPy 配列の組み合わせを取得する
  3. Python の for-in メソッドで NumPy 配列の組み合わせを取得する
NumPy で 2つの配列の組み合わせを取得する

この記事では、Python で 2つの NumPy 配列のデカルト積を見つける方法を紹介します。

Python の itertools.product() 関数で NumPy 配列の組み合わせを取得する

itertools パッケージは、組み合わせと順列に関連する多くの機能を提供します。2つの反復可能な itertools.product() 関数デカルト積を使用できます。itertools.product() 関数は、入力パラメーターとして iterables を受け取り、iterables のデカルト積を返します。

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() 関数を使用して、2つの NumPy 配列のデカルト積を計算することもできます。numpy.meshgrid() 関数は、配列を入力引数として受け取り、2つの配列の外積を返します。

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() 関数を使用して、配列とそれ自体のデカルト外積を計算しました。次に、この操作の結果を np.array() 関数を使用して配列に変換し、numpy.reshape() 関数を使用して再形成しました。次に、新しい再形成された結果を combinations 配列内に保存しました。

Python の for-in メソッドで NumPy 配列の組み合わせを取得する

前の 2つの例と同じ目標を達成するためのもう 1つのより簡単な方法は、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