]> git.xolatile.top Git - soikk-matrix.git/commitdiff
Added Hadamard product and dot product
authorSoikk <76824648+Soikk@users.noreply.github.com>
Sun, 28 Aug 2022 20:29:18 +0000 (22:29 +0200)
committerSoikk <76824648+Soikk@users.noreply.github.com>
Sun, 28 Aug 2022 20:29:18 +0000 (22:29 +0200)
matrix.c
matrix.h

index b3b71b059b3771fc893a225f4e81469a24663f85..14b7940141fab050475622a6f8897d8d9f74b899 100644 (file)
--- a/matrix.c
+++ b/matrix.c
@@ -116,6 +116,20 @@ matrix *multiplyMatrices(matrix *m1, matrix *m2){
        return r; 
 }
 
+matrix *HadamardProduct(matrix *m1, matrix *m2){
+       if(!sameDimensions(m1, m2)){
+               fprintf(stderr, "Wrong dimensions (%dx%d != %dx%d)\n", m1->rows, m1->cols, m2->rows, m2->cols);
+               return NULL;
+       }
+       matrix *r = newMatrix(m1->rows, m1->cols);
+       for(int i = 0; i < r->rows; ++i){
+               for(int j = 0; j < r->cols; ++j){
+                       r->data[i][j] = m1->data[i][j] * m2->data[i][j];
+               }
+       }
+       return r;
+}
+
 static inline bool isSquare(matrix *m){
        return m->rows == m->cols;
 }
@@ -179,6 +193,10 @@ matrix *transpose(matrix *m){
        return r;
 }
 
+matrix *dotProduct(matrix *m1, matrix *m2){
+       return multiplyMatrices(m1, transpose(m2));
+}
+
 matrix *adjugate(matrix *m){
        return transpose(cofactor(m));
 }
@@ -208,6 +226,7 @@ matrix *raiseMatrix(matrix *m, int n){
        return r;
 }
 
+
 /*int main(){
 
        int input = 784, hidden = 300, output = 10;
index cc520382ba7366a59c96c8bae104c36da354f388..137932d4e8efd4099cd5add2809d4b4216562c9f 100644 (file)
--- a/matrix.h
+++ b/matrix.h
@@ -37,6 +37,8 @@ matrix *subtractMatrices(matrix *m1, matrix *m2);
 
 matrix *multiplyMatrices(matrix *m1, matrix *m2);
 
+matrix HadamardProduct(matrix *m1, matrix *m2);
+
 matrix *subMatrix(matrix *m, int row, int col);
 
 long double determinant(matrix *m);
@@ -45,6 +47,8 @@ matrix *cofactor(matrix *m);
 
 matrix *transpose(matrix *m);
 
+matrix *dotProduct(matrix *m1, matrix *m2);
+
 matrix *adjugate(matrix *m);
 
 matrix *inverse(matrix *m);