pontz_rwのブログ

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

ITP1_6_D: Matrix Vector Multiplication

行列とベクトルの積 | プログラミング入門 | Aizu Online Judge
ベクトルと行列の積についての問題

 c_i = \sum_{j=1}^m a_{ij}b_j  = a_{i1}b_1 + a_{i2}b_2 + \dots + a_{im}b_m
この式に沿って問題を解いていきます。


解答1

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

A = []
b = []

# 行列Aに要素を追加
for i in range(n):
    A.append([int(s) for s in input().split()])

# 列ベクトルbに要素を追加
for i in range(m):
    b.append([int(input())])

# Aとbの積を出力
for i in range(n):
    sum = 0
    # 列ベクトルc_iを求める
    for j in range(m):
        sum_i += A[i][j] * b[j][0]
    # 列ベクトルc_iを出力
    print(sum_i)

解答2
リスト内包表記を利用し、簡潔にしています。

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

A = [list(map(int, input().split())) for i in range(n)]
bt = [int(input()) for i in range(m)]

for i in range(n):
    print(sum([x * y for (x, y) in zip(A[i], bt)]))