行列の積

1冊でマスター 大学の線形代数, p.25

numpyの@演算子を使えばいいだけであるが、勉強なので定義どおりに実装しておく。

import numpy as np

def mat_mult(a, b):
    num_rows_a, num_cols_a = len(a), len(a[0])
    num_rows_b, num_cols_b = len(b), len(b[0])
    c = [[None for _ in range(num_cols_b)] for _ in range(num_rows_a)]
    for i in range(num_rows_a):
        for j in range(num_cols_b):
            c[i][j] = sum([a[i][_] * b[_][j] for _ in range(num_cols_a)])
    return c

a = [[1, -2],
     [2, 3],]
b = [[-2, 1],
     [3, -1],]
print(mat_mult(a, b))
print(mat_mult(b, a))

a = np.array(a)
b = np.array(b)
print(a@b)
print(b@a)