diff --git a/makefile b/makefile index f27b756..5d94684 100644 --- a/makefile +++ b/makefile @@ -57,10 +57,12 @@ imageInputTests: imageInput.o imageInputTests.c $(unityfolder)/unity.c # -------------------------- # Clean # -------------------------- +#clean: +#ifeq ($(OS),Windows_NT) +# del /f *.o *.exe +#else +# rm -f *.o mnist runMatrixTests runNeuralNetworkTests runImageInputTests +#endif +# clean für windows clean: -ifeq ($(OS),Windows_NT) - del /f *.o *.exe -else - rm -f *.o mnist runMatrixTests runNeuralNetworkTests runImageInputTests -endif - + rm -f *.o *.exe \ No newline at end of file diff --git a/matrix.c b/matrix.c index ac8c915..7a8dcac 100644 --- a/matrix.c +++ b/matrix.c @@ -1,42 +1,65 @@ +#include "matrix.h" #include #include -#include "matrix.h" - // TODO Matrix-Funktionen implementieren - -Matrix createMatrix(unsigned int rows, unsigned int cols) -{ - MatrixType*data= malloc(rows*cols*sizeof(MatrixType)); //Speicher reservieren - Matrix newMatrix = {rows,cols,data}; - return newMatrix; +/*typedef struct { + unsigned int rows; //Zeilen + unsigned int cols; //Spalten + MatrixType *buffer; //Zeiger auf Speicherbereich Reihen*Spalten +} Matrix;*/ +Matrix createMatrix(unsigned int rows, unsigned int cols) { + MatrixType *buffer = + malloc(rows * cols * sizeof(MatrixType)); // Speicher reservieren, malloc + // liefert Zeiger auf Speicher + Matrix newMatrix = {rows, cols, buffer}; // neue Matrix nach struct + return newMatrix; } - -void clearMatrix(Matrix *matrix) -{ - matrix->data = UNDEFINED_MATRIX_VALUE; //Auf 0 setzen - matrix->rows = UNDEFINED_MATRIX_VALUE; - matrix->cols = UNDEFINED_MATRIX_VALUE; - - free((*matrix).data); //Speicher freigeben - +void clearMatrix(Matrix *matrix) { + matrix->buffer = UNDEFINED_MATRIX_VALUE; + matrix->rows = UNDEFINED_MATRIX_VALUE; + matrix->cols = UNDEFINED_MATRIX_VALUE; + free((*matrix).buffer); // Speicher freigeben } +void setMatrixAt(const MatrixType value, Matrix matrix, + const unsigned int rowIdx, // Kopie der Matrix wird übergeben + const unsigned int colIdx) { -void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) -{ - + matrix.buffer[rowIdx * matrix.cols + colIdx] = + value; // rowIdx * matrix.cols -> Beginn der Zeile colIdx ->Spalte + // innerhalb der Zeile } +MatrixType getMatrixAt(const Matrix matrix, + unsigned int rowIdx, // Kopie der Matrix wird übergeben + unsigned int colIdx) { + if (rowIdx >= matrix.rows || + colIdx >= matrix.cols) { // Speichergröße nicht überschreiten + return 0; + } -MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) -{ - + MatrixType value = matrix.buffer[rowIdx * matrix.cols + colIdx]; + + return value; } +Matrix add(const Matrix matrix1, const Matrix matrix2) { -Matrix add(const Matrix matrix1, const Matrix matrix2) -{ - + // Ergebnismatrix + Matrix result; + + // Broadcasting nur bei Vektor und Matrix, Fehlermeldung bei zwei unpassender + // Matrix + if (matrix1.rows != matrix2.rows) { + + // check, which one is smaller + // realloc + } + + if (matrix1.cols != matrix2.cols) { + } + + // Speicher reservieren + + // Matrix addieren + + return result; } - -Matrix multiply(const Matrix matrix1, const Matrix matrix2) -{ - -} \ No newline at end of file +Matrix multiply(const Matrix matrix1, const Matrix matrix2) { return matrix1; } diff --git a/matrix.h b/matrix.h index 736e6e1..ca871ae 100644 --- a/matrix.h +++ b/matrix.h @@ -6,20 +6,20 @@ typedef float MatrixType; // TODO Matrixtyp definieren -typedef struct -{ - unsigned int rows; - unsigned int cols; - MatrixType *data; -} Matrix; +typedef struct { + unsigned int rows; + unsigned int cols; + MatrixType *buffer; +} Matrix; Matrix createMatrix(unsigned int rows, unsigned int cols); void clearMatrix(Matrix *matrix); -void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx); -MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx); +void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, + unsigned int colIdx); +MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, + unsigned int colIdx); Matrix add(const Matrix matrix1, const Matrix matrix2); Matrix multiply(const Matrix matrix1, const Matrix matrix2); - #endif