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
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
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
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
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
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):
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
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):