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

Pythonで2つの行列を加算するプログラム

この記事では、ユーザーが入力した2つの行列を受け取り、その合計(加算結果)を表示するPythonプログラムを紹介します。行列の加算では、ネストされたリスト内包表記や二重ループを活用することで、各要素を効率的に処理できます。

アルゴリズム

処理の手順は以下の通りです。

ステップ1:2つの行列を入力する。
ステップ2:ネストされたforループを使って、各行・各列を順番に走査する。
ステップ3:各イテレーションで、2つの行列の対応する要素同士を加算し、その結果を格納する。

サンプルコード

以下は、ネストされたループを使用して2つの行列を加算するプログラムです。まず1つ目の行列Aの要素を入力し、続いて2つ目の行列Bの要素を入力します。

# ネストされたループを使って2つの行列を加算するプログラム
A = []
n = int(input("N x N 行列の N を入力してください : "))         # ここでは3
# 2次元配列を格納するためにリストを使用
# ユーザー入力を受け取りリストに保存(ここでは1〜9を入力)
print("要素を入力してください ::>")
for i in range(n):
    row = []                                   # 行を一時的に保存するリスト
    for j in range(n):
        row.append(int(input()))               # 入力値を行リストに追加
    A.append(row)                              # 行をリストに追加
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 x N 行列の N を入力してください : "))        # ここでは3
print("要素を入力してください ::>")
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]]

# 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(n):
    # 列を走査
    for j in range(len(A[0])):
        result[i][j] = A[i][j] + B[i][j]

print("計算結果の行列 ::>")
for r in result:
    print(r)

実行結果

実際にプログラムを実行すると、以下のような出力が得られます。ここでは、1つ目の行列として各行が「10, 20, 30」、2つ目の行列として各行が「100, 200, 300」の要素を入力しています。

Enter N for N x N matrix : 3
Enter the element ::>
10
10
10
20
20
20
30
30
30
[[10, 10, 10], [20, 20, 20], [30, 30, 30]]
Display Array In Matrix Form
10 10 10
20 20 20
30 30 30
Enter N for N x N matrix : 3
Enter the element ::>
100
100
100
200
200
200
300
300
300
[[100, 100, 100], [200, 200, 200], [300, 300, 300]]
Display Array In Matrix Form
100 100 100
200 200 200
300 300 300
Resultant Matrix is ::>
[110, 110, 110]
[220, 220, 220]
[330, 330, 330]

補足:より簡潔な書き方

上記のプログラムでは二重のforループを使用しましたが、リスト内包表記を使えば、行列の加算部分はさらに簡潔に記述できます。

result = [[A[i][j] + B[i][j] for j in range(len(A[0]))] for i in range(len(A))]

また、数値計算を頻繁に行う場合は、NumPyライブラリを利用するのもおすすめです。np.array()で行列を作成すれば、「A + B」というシンプルな記述だけで加算が完了します。

まとめ

今回は、Pythonで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進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを