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 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
def x_gets_subset_of_A_kron_B_times_v(v, A, B, row_inds, col_inds): rc_a, cc_a = A.shape rc_b, cc_b = B.shape nzc_x = len(row_inds) x_after = np.zeros(nzc_x) temp = v.reshape((cc_a, rc_b), order = 'F') if rc_a * cc_a * cc_b + cc_b * nzc_x < rc_b * cc_a * cc_b + cc_a * nzc_x: #if False: #if True: temp = np.dot(A, temp) sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(x_after, temp, B, row_inds, col_inds, nzc_x, rc_b) return x_after else: temp = np.dot(temp, B) sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(x_after, A, temp, row_inds, col_inds, nzc_x, cc_a) return x_after
def x_gets_subset_of_A_kron_B_times_v(v, A, B, row_inds, col_inds): rc_a, cc_a = A.shape rc_b, cc_b = B.shape nzc_x = len(row_inds) x_after = np.zeros(nzc_x) temp = v.reshape((cc_a, rc_b), order='F') if rc_a * cc_a * cc_b + cc_b * nzc_x < rc_b * cc_a * cc_b + cc_a * nzc_x: #if False: #if True: temp = np.dot(A, temp) sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries( x_after, temp, B, row_inds, col_inds, nzc_x, rc_b) return x_after else: temp = np.dot(temp, B) sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries( x_after, A, temp, row_inds, col_inds, nzc_x, cc_a) return x_after
def u_gets_axb(xx, A, B, label_row_inds, label_col_inds): rc_a, cc_a = A.shape rc_b, cc_b = B.shape nzc_u = len(label_row_inds) len_c = rc_a * cc_b x_after = zeros(nzc_u) temp = xx.reshape((cc_a, rc_b), order='F') if rc_a * cc_a * cc_b + cc_b * nzc_u < rc_b * cc_a * cc_b + cc_a * nzc_u: #if False: #if True: temp = A * temp #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) sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(x_after, temp, B, label_row_inds, label_col_inds, nzc_u, rc_b) return x_after else: temp = temp * B sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(x_after, A, temp, label_row_inds, label_col_inds, nzc_u, cc_a) return x_after
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 compute_subset_of_matprod_entries(*args): sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries(*args)
def compute_subset_of_matprod_entries(*args): sparse_kronecker_multiplication_tools.compute_subset_of_matprod_entries( *args)