コード例 #1
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
def none_negative_svd(matrix, threshold=1.0):
    # mode 1
    shape1 = matrix.shape
    matrix_mode_one = unfold(matrix, 1)
    u, s, v = np.linalg.svd(matrix_mode_one, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_one.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    print "is all close: ", np.allclose(matrix_mode_one,
                                        u.dot(singular_matrix).dot(v))
    result_u, sigma, param_matrix = matrix_sn_nn(u)

    print "result: ", result_u
    print "sigma: ", sigma
    print "param_matrix: ", param_matrix

    remain_matrix = inv(param_matrix).dot(
        inv(sigma)).dot(singular_matrix).dot(v)

    shape2 = (result_u.shape[1], shape1[1])
    tensor2 = fold(remain_matrix, 1, shape2)
    print "tensor2: ", tensor2

    # mode 2
    matrix_mode_two = unfold(tensor2, 2)
    u, s, v = np.linalg.svd(matrix_mode_two, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_two.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    result_v, sigma, param_matrix = matrix_sn_nn(u)

    remain_matrix = inv(param_matrix).dot(
        inv(sigma)).dot(singular_matrix).dot(v)

    shape3 = (result_u.shape[1], result_v.shape[1])
    r = fold(remain_matrix, 2, shape3)

    print "u: ", result_u
    print "v: ", result_v
    print "r: ", r

    return result_u, result_v, r
コード例 #2
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
def none_negative_svd(matrix, threshold=1.0):
    # mode 1
    shape1 = matrix.shape
    matrix_mode_one = unfold(matrix, 1)
    u, s, v = np.linalg.svd(matrix_mode_one, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_one.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    print "is all close: ", np.allclose(matrix_mode_one, u.dot(singular_matrix).dot(v))
    result_u, sigma, param_matrix = matrix_sn_nn(u)

    print "result: ", result_u
    print "sigma: ", sigma
    print "param_matrix: ", param_matrix


    remain_matrix = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(v)

    shape2 = (result_u.shape[1], shape1[1])
    tensor2 = fold(remain_matrix, 1, shape2)
    print "tensor2: ", tensor2

    # mode 2
    matrix_mode_two = unfold(tensor2, 2)
    u, s, v = np.linalg.svd(matrix_mode_two, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_two.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    result_v, sigma, param_matrix = matrix_sn_nn(u)

    remain_matrix = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(v)

    shape3 = (result_u.shape[1], result_v.shape[1])
    r = fold(remain_matrix, 2, shape3)

    print "u: ", result_u
    print "v: ", result_v
    print "r: ", r

    return result_u, result_v, r
コード例 #3
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
def none_negative_svd2(matrix, threshold=1.0):
    # mode 1
    shape1 = matrix.shape
    matrix_mode_one = unfold(matrix, 1)
    u, s, v = np.linalg.svd(matrix_mode_one, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_one.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    print "is all close: ", np.allclose(matrix_mode_one, u.dot(singular_matrix).dot(v))
    result_u, sigma, param_matrix = matrix_sn_nn(u)
    result_v, sigma2, param_matrix2 = matrix_sn_nn(v)

    print "result: ", result_u
    print "sigma: ", sigma
    print "param_matrix: ", param_matrix
    print "sigma2: ", sigma2
    print "param_matrix2: ", param_matrix2

    r = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(inv(sigma2).transpose()).dot(inv(param_matrix2).transpose())

    return result_u, result_v, r
コード例 #4
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
def none_negative_svd2(matrix, threshold=1.0):
    # mode 1
    shape1 = matrix.shape
    matrix_mode_one = unfold(matrix, 1)
    u, s, v = np.linalg.svd(matrix_mode_one, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_one.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    print "is all close: ", np.allclose(matrix_mode_one,
                                        u.dot(singular_matrix).dot(v))
    result_u, sigma, param_matrix = matrix_sn_nn(u)
    result_v, sigma2, param_matrix2 = matrix_sn_nn(v)

    print "result: ", result_u
    print "sigma: ", sigma
    print "param_matrix: ", param_matrix
    print "sigma2: ", sigma2
    print "param_matrix2: ", param_matrix2

    r = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(
        inv(sigma2).transpose()).dot(inv(param_matrix2).transpose())

    return result_u, result_v, r
コード例 #5
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
def none_negative_hosvd(tensor, threshold=1.0):
    # mode 1
    shape1 = tensor.shape
    matrix_mode_one = unfold(tensor, 1)
    u, s, v = np.linalg.svd(matrix_mode_one, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_one.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    print "is all close: ", np.allclose(matrix_mode_one,
                                        u.dot(singular_matrix).dot(v))
    result_u, sigma, param_matrix = matrix_sn_nn(u)

    print "result: ", result_u
    print "sigma: ", sigma
    print "param_matrix: ", param_matrix

    remain_matrix = inv(param_matrix).dot(
        inv(sigma)).dot(singular_matrix).dot(v)

    shape2 = (result_u.shape[1], shape1[1], shape1[2])
    tensor2 = fold(remain_matrix, 1, shape2)
    print "tensor2: ", tensor2

    # mode 2
    matrix_mode_two = unfold(tensor2, 2)
    u, s, v = np.linalg.svd(matrix_mode_two, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_two.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    result_v, sigma, param_matrix = matrix_sn_nn(u)

    remain_matrix = inv(param_matrix).dot(
        inv(sigma)).dot(singular_matrix).dot(v)

    shape3 = (result_u.shape[1], result_v.shape[1], shape1[2])
    tensor3 = fold(remain_matrix, 2, shape3)
    print "tensor3: ", tensor3

    # mode 3
    matrix_mode_three = unfold(tensor3, 3)
    u, s, v = np.linalg.svd(matrix_mode_three, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_three.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    result_w, sigma, param_matrix = matrix_sn_nn(u)

    remain_matrix = inv(param_matrix).dot(
        inv(sigma)).dot(singular_matrix).dot(v)

    shape4 = (result_u.shape[1], result_v.shape[1], result_w.shape[1])
    r = fold(remain_matrix, 3, shape4)
    # print "tensor4: ", r

    print "u: ", result_u
    print "v: ", result_v
    print "w: ", result_w
    print "r: ", r

    # print r.dot(result_u).dot(result_v).dot(result_w)

    x = recon(r, result_u, 1)
    x = recon(x, result_v, 2)
    x = recon(x, result_w, 3)
    print "reconstruct tensor: ", x
    print "tensor: ", tensor

    return x, result_u, result_v, result_w, r
コード例 #6
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
    print list(D[0])
    print D[1]
    print D[2]

    s1 = unfold(S, 1)
    print "core tensor unfold: ", s1
    print "orthogonal: ", s1[1].dot(s1[2])

    # print np.array([1, 2]).dot(np.array([2, 3]))

    A2 = reconstruct(S, U)
    print "reconstruct tensor: ", A2

    print frobenius_norm(A - A2)

    aaa = matrix_sn_nn(U[1])
    print "before:", U[1]
    print "after:", aaa

    x, result_u, result_v, result_w, r = none_negative_hosvd(A)
    n_a = result_u.shape[1]
    n_b = result_v.shape[1]
    n_c = result_w.shape[1]

    print A[2][1][0]
    print n_a, n_b, n_c, result_u.shape, result_v.shape, result_w.shape, r.shape, np.array(
        result_u)[2][2]
    B = np.zeros((3, 3, 3))
    for index_i in range(0, 3):
        for index_j in range(0, 3):
            for index_k in range(0, 3):
コード例 #7
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
def none_negative_hosvd(tensor, threshold=1.0):
    # mode 1
    shape1 = tensor.shape
    matrix_mode_one = unfold(tensor, 1)
    u, s, v = np.linalg.svd(matrix_mode_one, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_one.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    print "is all close: ", np.allclose(matrix_mode_one, u.dot(singular_matrix).dot(v))
    result_u, sigma, param_matrix = matrix_sn_nn(u)

    print "result: ", result_u
    print "sigma: ", sigma
    print "param_matrix: ", param_matrix


    remain_matrix = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(v)

    shape2 = (result_u.shape[1], shape1[1], shape1[2])
    tensor2 = fold(remain_matrix, 1, shape2)
    print "tensor2: ", tensor2

    # mode 2
    matrix_mode_two = unfold(tensor2, 2)
    u, s, v = np.linalg.svd(matrix_mode_two, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_two.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    result_v, sigma, param_matrix = matrix_sn_nn(u)

    remain_matrix = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(v)

    shape3 = (result_u.shape[1], result_v.shape[1], shape1[2])
    tensor3 = fold(remain_matrix, 2, shape3)
    print "tensor3: ", tensor3

    # mode 3
    matrix_mode_three = unfold(tensor3, 3)
    u, s, v = np.linalg.svd(matrix_mode_three, full_matrices=True)
    print u.shape, s.shape, v.shape
    singular_matrix = np.zeros(matrix_mode_three.shape)
    l = s.shape[0]
    singular_matrix[:l, :l] = np.diag(s)
    result_w, sigma, param_matrix = matrix_sn_nn(u)

    remain_matrix = inv(param_matrix).dot(inv(sigma)).dot(singular_matrix).dot(v)

    shape4 = (result_u.shape[1], result_v.shape[1], result_w.shape[1])
    r = fold(remain_matrix, 3, shape4)
    # print "tensor4: ", r

    print "u: ", result_u
    print "v: ", result_v
    print "w: ", result_w
    print "r: ", r

    # print r.dot(result_u).dot(result_v).dot(result_w)

    x = recon(r, result_u, 1)
    x = recon(x, result_v, 2)
    x = recon(x, result_w, 3)
    print "reconstruct tensor: ", x
    print "tensor: ", tensor

    return x, result_u, result_v, result_w, r
コード例 #8
0
ファイル: hosvd.py プロジェクト: pengyuan/markov2tensor
    print list(D[0])
    print D[1]
    print D[2]

    s1 = unfold(S, 1)
    print "core tensor unfold: ", s1
    print "orthogonal: ", s1[1].dot(s1[2])

    # print np.array([1, 2]).dot(np.array([2, 3]))

    A2 = reconstruct(S, U)
    print "reconstruct tensor: ", A2

    print frobenius_norm(A-A2)

    aaa = matrix_sn_nn(U[1])
    print "before:", U[1]
    print "after:", aaa

    x, result_u, result_v, result_w, r = none_negative_hosvd(A)
    n_a = result_u.shape[1]
    n_b = result_v.shape[1]
    n_c = result_w.shape[1]

    print A[2][1][0]
    print n_a, n_b, n_c, result_u.shape, result_v.shape, result_w.shape, r.shape, np.array(result_u)[2][2]
    B = np.zeros((3, 3, 3))
    for index_i in range(0, 3):
        for index_j in range(0, 3):
            for index_k in range(0, 3):
                for i in range(0, n_a):