チュートリアル Linear Algebra Part2解答例


Linear Algebra=線形代数
Sample Answers for QuantumKatas Linear Algebra part I
https://github.com/microsoft/QuantumKatas/tree/master/tutorials/LinearAlgebra 

(いきなりこのページに飛んできた人で最初から勉強されたい方はこちらをご参照ください)

ここではQ#による量子プログラミングにあたっての数学的前提知識の学習を行います。
Part 2は内積・外積などを学習します。

Exercise 9: Inner product. (行列の内積)

行列の内積(スカラー積)

@exercise
def inner_prod(v : Matrix, w : Matrix) -> complex:
    n = len(v)
    
    c = create_empty_matrix(n, 0)
    c = conjugate(v)
    
    x = 0 + 0j
    for i in range(n):
        x =x + c[i][0] * w[i][0]

    return(x)


Exercise 10: Normalized vectors

単位ベクトルの生成

@exercise
def normalize(v : Matrix) -> Matrix:
    n = len(v)
    m = len(v[0])
    
    w = inner_prod(v, v)
    a = math.sqrt(w.real)
    c = create_empty_matrix(n, m)

    for i in range(n):
        c[i][0] = v[i][0] / a

    return c


Exercise 11: Outer product

行列の外積(ベクトル積)
mは変数にしなくても1でハードコーディングでよいです。
@exercise
def outer_prod(v : Matrix, w : Matrix) -> Matrix:
    n = len(v)
    m = len(w)    

    c = create_empty_matrix(m, 0)
    c = conjugate(w)

    d = create_empty_matrix(n, m)
    for i in range(n):
        for j in range(m):
            d[i][j] = v[i][0] * c[j][0]
    return(d)

Exercise 12*: Tensor Product.

テンソル積
出来上がる行列のインデックスをきちんと考えればそれほど難しい問題ではないですね。

@exercise
def tensor_product(a : Matrix, b : Matrix) -> Matrix:
    n = len(a)
    m = len(a[0])    
    k = len(b)
    l = len(b[0])

    c = create_empty_matrix(n * k, m * l)
    for ia in range(n):
        for ja in range(m):
            for ib in range(k):
                for jb in range(l):
                    c[ia*k+ib][ja*l+jb] = a[ia][ja]*b[ib][jb]
    return c




次はLinear Algebra Part 3です。Go to Part 3