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