読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Python でやってみる『はじめMath! Javaでコンピュータ数学 第39回 行列の数学 ベクトルのスカラ倍と乗算』メモ

Python

(python2.7.7)

元ネタ

問題:ベクトルのスカラ倍,ベクトル同士の乗算を行う関数を作りましょう。

(1)ベクトルをスカラ倍する関数を作りましょう。数値は整数,ベクトルには配列を用いて下さい。
def v_scalar_matrix(a_arr, scalar):
    return [a * scalar for a in a_arr]

scalar = 5
a_arr = [1, 2, 3, 5, 8]
b_arr = v_scalar_matrix(a_arr, scalar)
for i in range(len(a_arr)):
    print "{scalar} * a[{i}] = b[{i}] => {scalar} * {a_i} = {b_i}".format(scalar=scalar, i=i, a_i=a_arr[i], b_i=b_arr[i])

結果

5 * a[0] = b[0] => 5 * 1 = 5
5 * a[1] = b[1] => 5 * 2 = 10
5 * a[2] = b[2] => 5 * 3 = 15
5 * a[3] = b[3] => 5 * 5 = 25
5 * a[4] = b[4] => 5 * 8 = 40

(2)ベクトル同士を乗算する関数を作りましょう。数値は整数,ベクトルにはArrayListを用いて下さい。

def a_multi_matrix(a_arr, b_arr):
    if not len(a_arr) == len(b_arr):
        raise
    return sum([a * b for a, b in zip(a_arr, b_arr)])

a_arr = [1, 2, 3, 5, 8]
b_arr = [2, 4, 5, 7, 9]
c = a_multi_matrix(a, b)
test = 0
for i in range(len(a)):
    test += a[i] * b[i]
    print "a({i})* b({i}) = {a_i} * {b_i} : test = {test}".format(i=i, a_i=a_arr[i], b_i=b_arr[i], test=test)
print "c = {c} : test = {test}".format(c=c, test=test)

結果

a(0)* b(0) = 1 * 2 : test = 2
a(1)* b(1) = 2 * 4 : test = 10
a(2)* b(2) = 3 * 5 : test = 25
a(3)* b(3) = 5 * 7 : test = 60
a(4)* b(4) = 8 * 9 : test = 132
c = 132 : test = 132