pontz_rwのブログ

プログラミング等の備忘録

ITP1_7_D: Matrix Multiplication

行列の積 | プログラミング入門 | Aizu Online Judge
行列A, Bの積を求める問題

行列Cの各要素C_{ij}は行列Ai行目の各要素と、行列Bj列目の各要素の積を合計したものです。

行列Bの行列を入れ替えた転置行列{}^t\!Bを用意すれば、行同士の演算で行列Cが求められます。

  1. 行列A, Bを作成し、転置行列{}^t\!Bzip()を使用し求めます。
  2. 次に、for文を使用し、行列Aの行aを取り出します。aに対して、転置行列{}^t\!Bの行bを取り出し、それぞれの要素を掛け合わせたものの合計を求め、結果をリストcに格納します。
  3. 転置行列{}^t\!Bのすべての行bに対して同様の処理をし、cを出力することで、行列Cの1行目を出力したことになります。
  4. これを、行列Aのすべての行aに対して同様の処理をすることで、行列Cを出力します。

解答

n, m, l = map(int, input().split())

matrix_A = [list(map(int, input().split())) for _ in range(n)]
matrix_B = [list(map(int, input().split())) for _ in range(m)]

matrix_B_transposed  = list(map(list, zip(*matrix_B)))

for a in matrix_A:
    c = []
    for bt in matrix_B_transposed:
        c.append(sum(x * y for (x, y) in zip(a, bt)))
    print(*c)