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

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つ目の行列の行数」が一致していれば、任意のサイズの行列に対して同じロジックを応用できます。


  1. 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] # ドライ

  2. Pythonで2つの数値を加算するプログラム:ビット演算による実装方法

    この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを