inline void transformation::operator() (const cnormal& nin, cnormal* nout) const { float inv_trans[4][4]; matrix_transpose (inv, inv_trans); matrix_vector_multiply (inv_trans, nin, *nout); }
inline cvector transformation::operator() (const cvector& v) const { cvector res; matrix_vector_multiply (mat, v, res); return res;s }
inline cpoint transformation::operator() (const cpoint& p) const { cpoint res; matrix_vector_multiply (mat, p, res); return res; }
inline cnormal transformation::operator() (const cnormal& n) const { float inv_trans[4][4]; cnormal res; matrix_transpose (inv, inv_trans); matrix_vector_multiply (inv_trans, n, res); return res; }
void dnn::forward_activation(int index_lower_layer, float ** local_weights, float * local_bias, float * visible, float * hidden) { int num_units_hidden=num_units_ineach_layer[index_lower_layer+1]; int num_units_visible=num_units_ineach_layer[index_lower_layer]; matrix_vector_multiply(local_weights, visible, hidden, num_units_hidden, num_units_visible); add_vector(hidden, local_bias, num_units_hidden); if(index_lower_layer<num_layers-2) activate_logistic(hidden, num_units_hidden); else if(index_lower_layer==num_layers-2) log2ori(hidden,num_units_hidden ); }
int main(int argc, char **argv) { const int m = 10000, n = 10000; double tbeg, tend; tbeg = WTime(); struct vector *x = vector_create(n); struct vector *y = vector_create(m); struct vector *y_ref = vector_create(m); struct matrix *A = matrix_create(m, n); // setup values in our test vector and in our reference result setup_test_vectors(x, y_ref); // build a test matrix setup_test_matrix(A); tend = WTime(); printf("setup took %g sec\n", tend - tbeg); // calculate y = Ax tbeg = WTime(); matrix_vector_multiply(y, A, x); tend = WTime(); printf("matrix_vector_multiply() took %g sec\n", tend - tbeg); // the resulting vector for this test should equal our reference result tbeg = WTime(); assert(vector_is_equal(y, y_ref)); tend = WTime(); printf("checking result took %g sec\n", tend - tbeg); // clean up vector_destroy(x); vector_destroy(y); vector_destroy(y_ref); matrix_destroy(A); return 0; }
inline void transformation::operator() (const cvector& vin, cvector* vout) const { matrix_vector_multiply (mat, vin, *vout); }
inline void transformation::operator() (const cpoint& pin, cpoint* pout) const { matrix_vector_multiply (mat, pin, *pout); }