AOJ 行列の積を求めるプログラム

プログラミング言語によっては、行列の積を求めるためのライブラリが用意されています。
おそらく、Pythonにも用意されていることでしょう。

しかし、ここでの目的はそのようなライブラリを作成するためのアルゴリズムを理解することなので、Pythonの基本データ構造リスト(配列)のみを用いることにします。

■問題
Structured Program II – Matrix Multiplication

■プログラム
紙と鉛筆を使えば簡単に計算できるのに、なぜコーディングするとこんなにも面倒なのだろうか。
そんな不満をぶつぶつ言いながら、私はプログラム作りに勤しみました。

# 行列の積を求めるプログラム
import sys

def mul_matrix(a, b):
    n = len(a)
    m = len(b)
    l = len(b[0])
    
    ans = []

    for i in range(n):
        new_row = []
        for j in range(l):
            sum = 0
            for k in range(m):
                sum += a[i][k] * b[k][j]

            new_row.append(sum)

        ans.append(new_row)
    
    return ans

def main():
    n, m, l = [int(i) for i in sys.stdin.readline().strip().split(' ')]
    
    a = []
    b = []
    
    for i in range(n):
        data = [int(j) for j in sys.stdin.readline().strip().split(' ')]
        a.append(data)

    for i in range(m):
        data = [int(j) for j in sys.stdin.readline().strip().split(' ')]
        b.append(data)

    ans = mul_matrix(a, b)

    for i in ans:
        print(' '.join([str(j) for j in i]))
        
if __name__ == '__main__':
    main()

練習問題にしては、正解率は1/3とあまり高くありません。
chart_matrix_multiplication

ループカウンタがたくさん出現するので、あたふたしている人が多いのではないかと思います。

Pythonプログラミング物語 © 2016 Frontier Theme