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

PyTorchで2つのテンソルを比較する方法!torch.eq()の使い方を解説

PyTorchで2つのテンソルを要素ごと(element-wise)に比較するには、torch.eq()メソッドを使用します。このメソッドは、対応する各要素同士を比較し、等しければTrue、等しくなければFalseを返します。

比較できるのは同じ次元のテンソル同士だけでなく、次元が異なるテンソル同士も可能です。ただし、その場合はブロードキャストのルールに従い、シングルトン以外の次元におけるサイズが一致している必要があります。

torch.eq()を使う手順

  • 必要なライブラリをインポートします。以下のすべてのPythonサンプルではtorchライブラリを使用します。事前にインストールしておいてください。

  • PyTorchテンソルを作成し、内容を出力して確認します。

  • torch.eq(input1, input2)を呼び出します。戻り値はTrue/Falseで構成されるブール型テンソルです。対応する要素が一致していればTrue、そうでなければFalseとなります。

  • 結果として返されたテンソルを出力します。

例1:1次元テンソル同士の比較

次のPythonプログラムは、2つの1次元テンソルを要素ごとに比較する方法を示しています。

# 必要なライブラリをインポート
import torch

# 2つのテンソルを作成
T1 = torch.Tensor([2.4,5.4,-3.44,-5.43,43.5])
T2 = torch.Tensor([2.4,5.5,-3.44,-5.43, 43])

# 作成したテンソルを出力
print("T1:", T1)
print("T2:", T2)

# テンソルT1とT2を要素ごとに比較
print(torch.eq(T1, T2))

出力結果

T1: tensor([ 2.4000, 5.4000, -3.4400, -5.4300, 43.5000])
T2: tensor([ 2.4000, 5.5000, -3.4400, -5.4300, 43.0000])
tensor([ True, False, True, True, False])

出力を見ると、1番目・3番目・4番目の要素は一致しているためTrueとなり、2番目と5番目の要素は値が異なるためFalseになっています。

例2:2次元テンソル同士の比較

次のPythonプログラムは、2つの2次元テンソル(4×3行列)を要素ごとに比較する方法を示しています。

# 必要なライブラリをインポート
import torch

# 4x3の2次元テンソルを2つ作成
T1 = torch.Tensor([[2,3,-32],
                   [43,4,-53],
                   [4,37,-4],
                   [3,75,34]])
T2 = torch.Tensor([[2,3,-32],
                   [4,4,-53],
                   [4,37,4],
                   [3,-75,34]])

# 作成したテンソルを出力
print("T1:", T1)
print("T2:", T2)

# テンソルT1とT2を要素ごとに比較
print(torch.eq(T1, T2))

出力結果

T1: tensor([[ 2., 3., -32.],
            [ 43., 4., -53.],
            [ 4., 37., -4.],
            [ 3., 75., 34.]])
T2: tensor([[ 2., 3., -32.],
            [ 4., 4., -53.],
            [ 4., 37., 4.],
            [ 3., -75., 34.]])
tensor([[ True, True, True],
        [False, True, True],
        [ True, True, False],
        [ True, False, True]])

2次元の場合も仕組みは同じで、各位置の要素が一致すればTrue、不一致ならFalseが返されます。結果も入力と同じ形状のブール型テンソルになります。

例3:1次元テンソルと2次元テンソルの比較

次のPythonプログラムは、1次元テンソルと2次元テンソルを要素ごとに比較する方法を示しています。サイズが一致する非シングルトン次元を持つため、ブロードキャストによって比較が可能です。

# 必要なライブラリをインポート
import torch

# 2つのテンソルを作成
T1 = torch.Tensor([2.4,5.4,-3.44,-5.43,43.5])
T2 = torch.Tensor([[2.4,5.5,-3.44,-5.43, 7],
                   [1.0,5.4,3.88,4.0,5.78]])

# 作成したテンソルを出力
print("T1:", T1)
print("T2:", T2)

# テンソルT1とT2を要素ごとに比較
print(torch.eq(T1, T2))

出力結果

T1: tensor([ 2.4000, 5.4000, -3.4400, -5.4300, 43.5000])
T2: tensor([[ 2.4000, 5.5000, -3.4400, -5.4300, 7.0000],
            [ 1.0000, 5.4000, 3.8800, 4.0000, 5.7800]])
tensor([[ True, False, True, True, False],
        [False, True, False, False, False]])

このように、1次元テンソルT1は2次元テンソルT2の各行に対してブロードキャストされ、行ごとに要素比較が行われます。

補足:関連する比較メソッド

torch.eq()以外にも、PyTorchにはテンソル比較のための便利なメソッドが用意されています。

  • torch.ne():要素が異なる場合にTrueを返す(eq()の逆)。

  • torch.lt() / torch.le():それぞれ「より小さい」「以下」を判定。

  • torch.gt() / torch.ge():それぞれ「より大きい」「以上」を判定。

  • torch.equal():2つのテンソル全体が完全に同一かどうかを単一のブール値で判定。

  • torch.allclose():浮動小数点誤差を許容して近似的に等しいかを判定。

用途に応じてこれらのメソッドを使い分けることで、テンソル間の比較処理を効率的に記述できます。

  1. 【PyTorch入門】torch.histc()でテンソルのヒストグラムを計算・可視化する方法

    PyTorchでは、torch.histc() 関数を使うことでテンソルのヒストグラムを簡単に計算できます。この関数は、計算結果のヒストグラムをテンソルとして返します。主な引数は input(入力テンソル)、bins(ビン数)、min(最小値)、max(最大値) の4つです。min から max までの範囲が等幅のビンに分割され、各要素が対応するビンへ分類されます。なお、min 未満または max を超える要素は自動的に無視される点に注意してください。ヒストグラム計算の手順必要なライブラリをインポートします。以降のPythonサンプルでは torch と Matplotlib を使用するため、

  2. 画像をPyTorchテンソルに変換する方法【PIL・OpenCV対応の実装例つき】

    PyTorchのテンソル(Tensor)とは、単一のデータ型で構成されたn次元配列(行列)のことです。NumPy配列とよく似ていますが、最大の違いは、テンソルがGPUを活用して数値計算を高速化できるという点にあります。そのため、画像を使った深層学習では、まず画像をテンソル形式へ変換することが一般的な前処理となります。 この記事では、画像をPyTorchテンソルに変換する具体的な手順を、PIL画像を使う例とOpenCV(numpy.ndarray)を使う例の2パターンでわかりやすく解説します。 画像をPyTorchテンソルに変換する手順 必要なライブラリをインポートする:torch、torch