def x_gets_C_times_M_kron_N_times_B_times_v(v, M, N, row_inds_C, col_inds_C,
                                            row_inds_B, col_inds_B):
    rc_m, cc_m = M.shape
    rc_n, cc_n = N.shape
    u_len = len(row_inds_C)
    v_len = len(row_inds_B)

    if rc_m * v_len + cc_n * u_len < rc_n * v_len + cc_m * u_len:
        #if False:
        #if True:
        #print 'foo'
        temp = np.zeros((cc_n, rc_m))
        sparse_kronecker_multiplication_tools.sparse_mat_from_left(
            temp, v, M.T, row_inds_B, col_inds_B, v_len, rc_m)
        x_after = np.zeros((u_len))
        sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(
            x_after, N, temp, row_inds_C, col_inds_C, u_len, cc_n)
        return x_after
    else:
        #print 'bar'
        temp = np.zeros((rc_n, cc_m))
        sparse_kronecker_multiplication_tools.sparse_mat_from_right(
            temp, N, v, row_inds_B, col_inds_B, v_len, rc_n)
        x_after = np.zeros((u_len))
        sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(
            x_after, temp, M.T, row_inds_C, col_inds_C, u_len, cc_m)
        return x_after
Example #2
0
 def mv(v):
     assert v.shape[0] == len(self.label_row_inds)
     temp = zeros((K1.shape[1], K2.shape[0]))
     sparse_kronecker_multiplication_tools.sparse_mat_from_left(temp, v, K2, label_row_inds, label_col_inds, lsize, K2.shape[0])
     v_after = zeros(v.shape[0])
     #print K1.shape, temp.shape
     sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(v_after, K1, temp, label_row_inds, label_col_inds, lsize, K1.shape[0])
     return v_after + regparam * v
Example #3
0
def c_gets_axb(x, A, B, label_row_inds, label_col_inds):
    rc_a, cc_a = A.shape
    rc_b, cc_b = B.shape
    nzc_x = len(label_row_inds)
    len_c = rc_a * cc_b
    
    if rc_a * cc_a * cc_b + cc_b * nzc_x < rc_b * cc_a * cc_b + cc_a * nzc_x:
    #if False:
        #print 'foo'
        temp = mat(zeros((cc_a, cc_b)))
        sparse_kronecker_multiplication_tools.sparse_mat_from_left(temp, x, B, label_row_inds, label_col_inds, nzc_x, cc_b)
        temp = A * temp
        return temp.reshape((len_c,), order='F')
    else:
        #print 'bar'
        temp = mat(zeros((rc_a, rc_b)))
        sparse_kronecker_multiplication_tools.sparse_mat_from_right(temp, x, A, label_row_inds, label_col_inds, nzc_x, rc_a)
        temp = temp * B
        return temp.reshape((len_c,), order='F')
def x_gets_A_kron_B_times_sparse_v(v, A, B, row_inds, col_inds):
    rc_a, cc_a = A.shape
    rc_b, cc_b = B.shape
    nzc_v = len(row_inds)
    len_c = rc_a * cc_b
    
    if rc_a * cc_a * cc_b + cc_b * nzc_v < rc_b * cc_a * cc_b + cc_a * nzc_v:
    #if False:
    #if True:
        #print 'foo'
        temp = np.zeros((cc_a, cc_b))
        sparse_kronecker_multiplication_tools.sparse_mat_from_left(temp, v, B, row_inds, col_inds, nzc_v, cc_b)
        temp = np.dot(A, temp)
        return temp.reshape((len_c,), order = 'F')
    else:
        #print 'bar'
        temp = np.zeros((rc_a, rc_b))
        sparse_kronecker_multiplication_tools.sparse_mat_from_right(temp, A, v, row_inds, col_inds, nzc_v, rc_a)
        temp = np.dot(temp, B)
        return temp.reshape((len_c,), order = 'F')
def x_gets_C_times_M_kron_N_times_B_times_v(v, M, N, row_inds_C, col_inds_C, row_inds_B, col_inds_B):
    rc_m, cc_m = M.shape
    rc_n, cc_n = N.shape
    u_len = len(row_inds_C)
    v_len = len(row_inds_B)
    
    if rc_m * v_len + cc_n * u_len < rc_n * v_len + cc_m * u_len:
    #if False:
    #if True:
        #print 'foo'
        temp = np.zeros((cc_n, rc_m))
        sparse_kronecker_multiplication_tools.sparse_mat_from_left(temp, v, M.T, row_inds_B, col_inds_B, v_len, rc_m)
        x_after = np.zeros((u_len))
        sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(x_after, N, temp, row_inds_C, col_inds_C, u_len, cc_n)
        return x_after
    else:
        #print 'bar'
        temp = np.zeros((rc_n, cc_m))
        sparse_kronecker_multiplication_tools.sparse_mat_from_right(temp, N, v, row_inds_B, col_inds_B, v_len, rc_n)
        x_after = np.zeros((u_len))
        sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(x_after, temp, M.T, row_inds_C, col_inds_C, u_len, cc_m)
        return x_after
def x_gets_A_kron_B_times_sparse_v(v, A, B, row_inds, col_inds):
    rc_a, cc_a = A.shape
    rc_b, cc_b = B.shape
    nzc_v = len(row_inds)
    len_c = rc_a * cc_b

    if rc_a * cc_a * cc_b + cc_b * nzc_v < rc_b * cc_a * cc_b + cc_a * nzc_v:
        #if False:
        #if True:
        #print 'foo'
        temp = np.zeros((cc_a, cc_b))
        sparse_kronecker_multiplication_tools.sparse_mat_from_left(
            temp, v, B, row_inds, col_inds, nzc_v, cc_b)
        temp = np.dot(A, temp)
        return temp.reshape((len_c, ), order='F')
    else:
        #print 'bar'
        temp = np.zeros((rc_a, rc_b))
        sparse_kronecker_multiplication_tools.sparse_mat_from_right(
            temp, A, v, row_inds, col_inds, nzc_v, rc_a)
        temp = np.dot(temp, B)
        return temp.reshape((len_c, ), order='F')
def sparse_mat_from_left(*args):
    sparse_kronecker_multiplication_tools.sparse_mat_from_left(*args)
def sparse_mat_from_left(*args):
    sparse_kronecker_multiplication_tools.sparse_mat_from_left(*args)