2 * Copyright (C) 2014-2015 Intel Corporation.
5 #include "matrix-ops.h"
9 void transpose (int rows, int cols, double m[rows][cols], double m_trans[cols][rows])
13 for (i = 0; i < rows; i++)
14 for (j = 0; j < cols; j++)
15 m_trans[j][i] = m[i][j];
19 void multiply (int m, int n, int p, double m1[m][n], double m2[n][p], double result[m][p])
23 for (i = 0; i < m; i++)
24 for (k = 0; k < p; k++) {
26 for (j = 0; j < n; j++)
27 result [i][k] += m1[i][j] * m2 [j][k];
32 void invert (int s, double m[s][s], double m_inv[s][s])
38 for (i = 0; i < s; i++)
39 for (j = 0; j < s; j++)
42 for (i = 0; i < s; i++)
47 for (i = 0; i < s; i++) {
49 for (j = i+1; j < s; j++) {
50 if (fabs(tmp[i][j]) > fabs(tmp[i][i]))
56 for (k = 0; k < s; k++) {
58 tmp[k][i] = tmp[k][swap];
62 m_inv[k][i] = m_inv[k][swap];
69 for (k = 0 ; k < s ; k++) {
74 for (j = 0 ; j < s ; j++)
77 for (k = 0 ; k < s; k++) {
78 tmp[k][j] -= tmp[k][i] * t;
79 m_inv[k][j] -= m_inv[k][i] * t;
86 void multiply_scalar_inplace(int rows, int cols, double m[rows][cols], double scalar)
90 for (i = 0; i < rows; i++)
91 for (j = 0; j < cols; j++)
92 m[i][j] = m[i][j] * scalar;
96 void assign (int rows, int cols, double m[rows][cols], double m1[rows][cols])
100 for (i = 0; i < rows; i++)
101 for (j = 0; j < cols; j++)
105 void substract (int rows, int cols, double m1[rows][cols], double m2[rows][cols], double res[rows][cols])
109 for (i = 0; i < rows; i++)
110 for (j = 0; j < cols; j++)
111 res[i][j] = m1[i][j] - m2[i][j];