void TranSVD::d1_to_d2(Transformable &del_data, Transformable &data) { Transformable new_data; VectorXd d1_vec = del_data.get_partial_data_eigen_vec(base_parameter_names); VectorXd d2_vec = Vt * d1_vec; for (int i = 0; i<Sigma.size(); ++i) { new_data[super_parameter_names[i]] = d2_vec[i]; } del_data = new_data; forward(data); }
void TranSVD::d2_to_d1(Transformable &del_data, Transformable &data) { Transformable new_data; VectorXd d2_vec = del_data.get_partial_data_eigen_vec(super_parameter_names); VectorXd d1_vec = Vt.transpose() * d2_vec; for (size_t i = 0; i < base_parameter_names.size(); ++i) { new_data[base_parameter_names[i]] = d1_vec[i]; } del_data = new_data; reverse(data); }