Python
 Computer >> コンピューター >  >> プログラミング >> Python

2つのNumPy配列の共通要素(積集合)を求める方法

この記事では、2つのNumPy配列の共通部分(積集合)を求める方法を解説します。2つの配列の「共通部分」とは、元の両方の配列に共通して含まれる要素だけを集めた配列のことです。

NumPyにはこの目的に特化した np.intersect1d() 関数が用意されており、わずか1行のコードで共通要素を抽出できます。

アルゴリズム

処理の手順は以下の通りです。

  1. NumPyをインポートします。
  2. 2つのNumPy配列を定義します。
  3. np.intersect1d() 関数を使って、配列同士の共通部分を求めます。
  4. 共通する要素からなる配列を出力します。

サンプルコード

import numpy as np

array_1 = np.array([1, 2, 3, 4, 5])
print("配列1:\n", array_1)

array_2 = np.array([2, 4, 6, 8, 10])
print("\n配列2:\n", array_2)

intersection = np.intersect1d(array_1, array_2)
print("\n2つの配列の共通部分:\n", intersection)

実行結果

配列1:
 [1 2 3 4 5]
配列2:
 [ 2  4  6  8 10]
2つの配列の共通部分:
 [2 4]

この例では、配列1と配列2の両方に含まれている要素が 24 のみであるため、出力結果は [2 4] となります。

np.intersect1d() の便利なオプション

assume_unique 引数

入力配列がすでにユニーク(重複なし)であることが分かっている場合は、assume_unique=True を指定すると処理が高速化されます。

intersection = np.intersect1d(array_1, array_2, assume_unique=True)

return_indices 引数

return_indices=True を指定すると、共通要素そのものに加えて、それぞれの配列内で該当要素が位置するインデックスも取得できます。

intersection, idx1, idx2 = np.intersect1d(array_1, array_2, return_indices=True)
print(intersection)  # [2 4]
print(idx1)          # [1 3]  → 配列1での位置
print(idx2)          # [0 1]  → 配列2での位置

まとめ

2つのNumPy配列の共通要素を求めたい場合は、np.intersect1d() を使うのが最もシンプルで確実な方法です。デフォルトでは結果はソートされた状態で返され、オプションを活用すればパフォーマンス向上やインデックスの取得にも対応できます。データ分析や前処理の現場で頻繁に使われるテクニックなので、ぜひ覚えておきましょう。

  1. Tkinterで2つのフレームを切り替える方法を解説

    多くのGUIアプリケーションでは、ユーザーがプログラムの異なるセクション間を行き来できるよう、複数の画面(ページ)を用意する必要があります。これを実現する方法のひとつが、メインウィンドウの中に複数のフレームを作成し、それらを切り替えるというアプローチです。 TkinterのFrameウィジェットは、アプリケーション内の多数のウィジェットをグループ化するために使用されます。2つの異なるフレームにそれぞれ別のウィジェットを配置し、ボタンのクリック操作によって、あるフレームから別のフレームへと表示を切り替えることができます。 実装例 ここでは、「greet frame(挨拶フレーム)」と「order

  2. Matplotlibで2つの直線の交点を求め、補助線を引く方法

    Matplotlibを使えば、2つの直線の交点を計算し、その点を通る水平線・垂直線(補助線)を簡単に描画できます。この記事では、傾きと切片から交点を求める数式の考え方と、実際にグラフへ可視化する手順を、コード例とともにわかりやすく解説します。実装の手順図のサイズを設定し、サブプロット周りの余白を自動調整します。2つの直線を傾き(m1, m2)と切片(c1, c2)で定義し、値を初期化します。numpyを使ってx軸のデータポイントを生成します。plot()メソッドで2本の直線を描画します。傾きと切片の値から、2直線の交点を計算します。点線スタイルで水平線と垂直線を描きます。交点(xi, yi)を