#include #include #include #include #include #ifdef STA_CORE #include #include #endif namespace sta{ namespace math { namespace linalg { matrix dot(matrix a, matrix b) { STA_ASSERT_MSG(a.get_cols() == b.get_rows(), "Matrix dimension mismatch"); uint8_t k = a.get_cols(); uint8_t m = a.get_rows(); uint8_t n = b.get_cols(); matrix output(m, n); for (uint8_t r = 0; r < m; r++) { for (uint8_t c = 0; c < n; c++) { float S = 0; for (uint8_t h = 0; h < k; h++) { S += a(r, h) * b(h, c); } output.set(r, c, S); } } return output; }; float norm(matrix m) { if( m.get_rows() == 1 || m.get_cols() == 1 ){ // apply euclid norm on vector uint16_t size = m.get_size(); float S = 0; for(uint8_t i = 0; i < size; i++) { S += m[i] * m[i]; } float s = sqrt(S); return s; } float sum = 0; for(int i=0; i