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

【Python入門】2つの行列が同一かどうかを判定するプログラムの書き方

この記事では、与えられた2つの行列(マトリックス)が同一であるかどうかを判定するPythonプログラムを紹介します。2つの行列が同一であるためには、次の条件を満たす必要があります。

  • 両行列の行数・列数(次数)が一致していること
  • 対応するすべての要素が等しいこと

これらの条件を1つでも満たさない場合、2つの行列は同一とはみなされません。

アルゴリズム

判定の手順は以下の通りです。計算量は O(n²)(n×n行列の場合)となります。

ステップ1: 2つの行列を作成する。
ステップ2: 1つ目の行列と2つ目の行列のすべての要素を走査し、
           対応する要素同士を順番に比較する。
ステップ3: すべての要素が一致していれば、2つの行列は同一である。

サンプルコード

以下のコードでは、ユーザーから行列のサイズと各要素を入力してもらい、2つの行列を比較して結果を表示します。

# 与えられた2つの行列が
# 同一であるかどうかを判定するプログラム

# A[][] と B[][] が同一なら 1 を、
# 異なれば 0 を返す関数
def areSame(A, B, n):
   for i in range(n):
      for j in range(n):
         if (A[i][j] != B[i][j]):
            return 0
   return 1
 
# ドライバーコード
n = int(input("n x n 行列のサイズ n を入力 : "))   # 例: 3

# --- 行列 A の入力 ---
A = []                                            # 2次元配列をリストで保持
print("行列Aの要素を入力してください ::>")
for i in range(n):
   row = []                                       # 行を一時的に格納するリスト
   for j in range(n):
      row.append(int(input()))                    # 入力値を行リストへ追加
   A.append(row)                                  # 完成した行をAへ追加

print(A)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 行列形式で表示
print("行列A(マトリックス形式)")
for i in range(n):
   for j in range(n):
      print(A[i][j], end=" ")
   print()

# --- 行列 B の入力 ---
B = []
print("行列Bの要素を入力してください ::>")
for i in range(n):
   row = []
   for j in range(n):
      row.append(int(input()))
   B.append(row)

print(B)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

print("行列B(マトリックス形式)")
for i in range(n):
   for j in range(n):
      print(B[i][j], end=" ")
   print()

# 判定結果の出力
if (areSame(A, B, n) == 1):
   print("2つの行列は同一です")
else:
   print("2つの行列は同一ではありません")
 
# このコードは Anant Agarwal 氏による寄稿です

実行結果

同じ要素を持つ2つの2×2行列を入力した場合の実行例です。

n x n 行列のサイズ n を入力 : 2
行列Aの要素を入力してください ::>
1
1
2
2
[[1, 1], [2, 2]]
行列A(マトリックス形式)
1 1 
2 2 
行列Bの要素を入力してください ::>
1
1
2
2
[[1, 1], [2, 2]]
行列B(マトリックス形式)
1 1 
2 2 
2つの行列は同一です

ポイントまとめ

  • 二重のforループで全要素を走査し、1つでも不一致があれば即座に「0」を返すことで無駄な比較を省いています。
  • すべてのループを抜けても不一致が見つからなければ「1」を返し、両行列は同一と判定されます。
  • 本コードでは行列のサイズ n を共通化していますが、実際には行数・列数が異なる場合はその時点で「同一ではない」と判定できます。

  1. 2つの行列を乗算するPythonプログラム

    ユーザーが入力した2つの行列を受け取り、その積(乗算結果)を表示するのがこのプログラムの目的です。ここでは、ネストされたリスト(2次元リスト)を使って行列を表現します。 行列の乗算では、「1つ目の行列の行の要素」と「2つ目の行列の列の要素」をそれぞれ掛け合わせ、その合計値を結果行列の要素とします。つまり、結果行列の i 行 j 列の値は、行列Aの i 行目と行列Bの j 列目の対応する要素同士の積の総和になります。 アルゴリズム ステップ1:2つの行列を入力する。 ステップ2:ネストされたforループで、各行・各列を順番に走査する。 ステップ3:すべての要素が0で初期化された結果用行列を用

  2. 【Python】2つの数値の2進表現がアナグラムかどうかを判定するプログラム

    2つの数値が与えられたとき、その2進表現同士がアナグラム(同じ文字を並べ替えたもの)になっているかどうかを判定します。Pythonでは、collectionsモジュールのCounterクラスと辞書の比較を組み合わせることで、この問題をシンプルかつ効率的に解くことができます。 実行例 入力: a = 8, b = 16 出力: Yes 両方の数値の2進表現は、0と1の個数が同一です。 アルゴリズム ステップ1 : 2つの数値を受け取ります。 ステップ2 : bin()関数で各数値を2進数の文字列に変換し、接頭辞「0b」に相当する先頭2文字を取り除きます。 ステップ3 : 2つの2進表現は