2つの行列を乗算するPythonプログラム
ユーザーが入力した2つの行列を受け取り、その積(乗算結果)を表示するのがこのプログラムの目的です。ここでは、ネストされたリスト(2次元リスト)を使って行列を表現します。
行列の乗算では、「1つ目の行列の行の要素」と「2つ目の行列の列の要素」をそれぞれ掛け合わせ、その合計値を結果行列の要素とします。つまり、結果行列の i 行 j 列の値は、行列Aの i 行目と行列Bの j 列目の対応する要素同士の積の総和になります。
アルゴリズム
ステップ1:2つの行列を入力する。 ステップ2:ネストされたforループで、各行・各列を順番に走査する。 ステップ3:すべての要素が0で初期化された結果用行列を用意する。1つ目の行列の行要素と2つ目の行列の列要素を掛け合わせ、その総和を結果行列の該当する要素として格納する。
サンプルコード
# 2つの行列を乗算するプログラム
A=[]
n=int(input("N×N行列のNを入力してください: "))
print("要素を入力してください ::>")
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]]
# 2次元配列を表示
print("行列形式で配列を表示")
for i in range(n):
for j in range(n):
print(A[i][j], end=" ")
print() # 改行
B=[]
n=int(input("N×N行列のNを入力してください : ")) # ここでは3
# 2次元配列を保存するためのリストを使用
# ユーザーの入力を取得してリストに保存(入力値:1〜9)
print("要素を入力してください ::>")
for i in range (n):
row=[] # 行を一時的に保存するリスト
for j in range(n):
row.append(int(input())) # 入力値を行リストに追加
B.append(row) # 完成した行をリストBに追加
print(B)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 2次元配列を表示
print("行列形式で配列を表示")
for i in range(n):
for j in range(n):
print(B[i][j], end=" ")
print()
result = [[0,0,0], [0,0,0], [0,0,0]]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
result[i][j] += A[i][k] * B[k][j]
print("結果の行列は以下の通りです ::>")
for r in result:
print(r)
実行結果
N×N行列のNを入力してください: 3 要素を入力してください ::> 2 1 4 2 1 2 3 4 3 [[2, 1, 4], [2, 1, 2], [3, 4, 3]] 行列形式で配列を表示 2 1 4 2 1 2 3 4 3 N×N行列のNを入力してください : 3 要素を入力してください ::> 1 2 3 4 5 6 7 8 9 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 行列形式で配列を表示 1 2 3 4 5 6 7 8 9 結果の行列は以下の通りです ::> [34, 41, 48] [20, 25, 30] [40, 50, 60]
ポイント解説
乗算処理の核心部分は三重のforループです。外側の2つのループが結果行列の位置(i 行 j 列)を決定し、最も内側のループが A[i][k] * B[k][j] を変数 k について繰り返し加算することで、行と列の内積を計算しています。
なお、この方法は正方行列に限定されません。「1つ目の行列の列数」と「2つ目の行列の行数」が一致していれば、任意のサイズの行列に対して同じロジックを応用できます。
-
Pythonで行列の転置を求めるプログラム
この記事では、与えられた問題に対する解法とアプローチについて詳しく解説します。 問題文 ある行列が与えられたとき、その転置を同じ行列に格納し、結果を表示する必要があります。 行列の転置とは、行を列に、列を行に入れ替えたものです。言い換えれば、行列Aの転置は、要素A[i][j]をA[j][i]と入れ替えることで得られます。 実装例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): A[i][j], A[j][i] = A[j][i], A[i][j] # ドライ
-
Pythonで2つの数値を加算するプログラム:ビット演算による実装方法
この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを