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 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_right(*args): sparse_kronecker_multiplication_tools.sparse_mat_from_right(*args)
def sparse_mat_from_right(*args): sparse_kronecker_multiplication_tools.sparse_mat_from_right(*args)