【Python】 行列の和と差

■行列

数や記号や式などを縦と横に矩形状に配列したものである。

(例)
・二次元行列

・三次元行列

■行列の和と差

行列の和と差は以下のように求める。

■例題

以下の多次元行列について、それぞれ和と差を求める。
★行列の計算はNumpyの配列を使用することで計算することができる。

▼問題1(2次元行列)

▼問題2(3次元行列)

■サンプルコード

▼問題1

# -*- Coding: UTF-8 -*-
import numpy as np

# 多次元配列を変数に格納
X = np.array([[1, 2, 3], [4, 5, 6]])
Y = np.array([[7, 8, 9], [10, 11, 12]])

# 多次元配列の和と差を算出
sum_val = X + Y
sum_def = X - Y

print("多次元配列の和:\n" + str(sum_val))
print("多次元配列の差:\n" + str(sum_def))

▼問題2

# -*- Coding: UTF-8 -*-
import numpy as np

# 多次元配列を変数に格納
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
B = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]])

# 多次元配列の和と差を算出
sum_val = A + B
sum_def = A - B

print("多次元配列の和:\n" + str(sum_val))
print("多次元配列の差:\n" + str(sum_def))

■実行結果

▼問題1

多次元配列の和:
[[ 8 10 12]
 [14 16 18]]
多次元配列の差:
[[-6 -6 -6]
 [-6 -6 -6]]

▼問題2

多次元配列の和:
[[10 10 10]
 [10 10 10]
 [10 10 10]]
多次元配列の差:
[[-8 -6 -4]
 [-2  0  2]
 [ 4  6  8]]

■参考:リスト型の配列で和と差を求める

Numpyを使用せず、リスト型にて+を使用すると、計算を行うのではなく、配列が連結される。
※「ー」については、エラーとなる。

▼サンプルコード

# -*- Coding: UTF-8 -*-

# 多次元配列を変数に格納
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
B = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]

# 多次元配列の和と差を算出
sum_val = A + B
print("多次元配列の和:\n" + str(sum_val))

sum_def = A - B
print("多次元配列の差:\n" + str(sum_def))

▼実行結果

多次元配列の和:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [9, 8, 7], [6, 5, 4], [3, 2, 1]]
unsupported operand type(s) for -: 'list' and 'list'

赤字部分については、配列同士を「ー」した場合に発生したものである。

したがって、今回は、各配列から要素を取り出し和と差の計算を行う。

▼サンプルコード

# -*- Coding: UTF-8 -*-

# 多次元配列を変数に格納
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
B = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]

# 計算結果格納用配列を用意
sum_val = []
sum_def = []

# 配列の要素数分ループ処理
for i in range(len(A)):
    for j in range(len(A[i])):
        # 和を算出し、配列に格納
        sum_val.append(A[i][j] + B[i][j])
        # 差を算出し、配列に格納
        sum_def.append(A[i][j] - B[i][j])

# \nは改行コード
print("多次元配列の和:\n" + str(sum_val))
print("多次元配列の差:\n" + str(sum_def))

▼実行結果

多次元配列の和:
[10, 10, 10, 10, 10, 10, 10, 10, 10]
多次元配列の差:
[-8, -6, -4, -2, 0, 2, 4, 6, 8]