2 * Copyright (C) 2014 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];
30 void invert (int s, double m[s][s], double m_inv[s][s])
36 for (i = 0; i < s; i++)
37 for (j = 0; j < s; j++)
39 for (i = 0; i < s; i++)
44 for (i = 0; i < s; i++) {
46 for (j = i+1; j < s; j++) {
47 if (fabs(tmp[i][j]) > fabs(tmp[i][i]))
53 for (k = 0; k < s; k++) {
55 tmp[k][i] = tmp[k][swap];
59 m_inv[k][i] = m_inv[k][swap];
65 for (k = 0 ; k < s ; k++) {
70 for (j = 0 ; j < s ; j++) {
73 for (k = 0 ; k < s; k++) {
74 tmp[k][j] -= tmp[k][i] * t;
75 m_inv[k][j] -= m_inv[k][i] * t;
82 void multiply_scalar_inplace(int rows, int cols, double m[rows][cols], double scalar)
86 for (i = 0; i < rows; i++)
87 for (j = 0; j < cols; j++)
88 m[i][j] = m[i][j] * scalar;
90 void assign (int rows, int cols, double m[rows][cols], double m1[rows][cols])
94 for (i = 0; i < rows; i++)
95 for (j = 0; j < cols; j++)
99 void substract (int rows, int cols, double m1[rows][cols], double m2[rows][cols], double res[rows][cols])
103 for (i = 0; i < rows; i++)
104 for (j = 0; j < cols; j++)
105 res[i][j] = m1[i][j] - m2[i][j];