Compare commits
No commits in common. "5776f526624dc2a91cb2007631bd2901ea49be15" and "72dab86dd961e6306687406030defbc5c70ea04b" have entirely different histories.
5776f52662
...
72dab86dd9
117
matrix.c
117
matrix.c
@ -75,134 +75,33 @@ MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int co
|
|||||||
|
|
||||||
Matrix add(const Matrix matrix1, const Matrix matrix2)
|
Matrix add(const Matrix matrix1, const Matrix matrix2)
|
||||||
{
|
{
|
||||||
float matrix1Wert = 0;
|
|
||||||
float matrix2Wert = 0;
|
|
||||||
float summe = 0;
|
|
||||||
int broadcasting = 0;
|
|
||||||
|
|
||||||
Matrix broadcastedmatrix1 = {0,0,NULL};
|
|
||||||
Matrix broadcastedmatrix2 = {0,0,NULL};
|
|
||||||
|
|
||||||
if((matrix1.rows != matrix2.rows) || (matrix1.cols != matrix2.cols))
|
if((matrix1.rows != matrix2.rows) || (matrix1.cols != matrix2.cols))
|
||||||
{
|
{
|
||||||
if((matrix1.rows != matrix2.rows) && (matrix1.cols == matrix2.cols))
|
|
||||||
{
|
|
||||||
if(matrix1.rows == 1)
|
|
||||||
{
|
|
||||||
broadcastedmatrix1 = createMatrix(matrix2.rows, matrix2.cols);
|
|
||||||
|
|
||||||
for(int row = 0; row<matrix2.rows; row++)
|
|
||||||
{
|
|
||||||
for(int col = 0; col<matrix2.cols; col++)
|
|
||||||
{
|
|
||||||
matrix1Wert = getMatrixAt(matrix1, 0, col);
|
|
||||||
setMatrixAt(matrix1Wert, broadcastedmatrix1, row, col);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
broadcasting = 1;
|
|
||||||
}
|
|
||||||
else if(matrix2.rows == 1)
|
|
||||||
{
|
|
||||||
broadcastedmatrix2 = createMatrix(matrix1.rows, matrix1.cols);
|
|
||||||
|
|
||||||
for(int row = 0; row<matrix1.rows; row++)
|
|
||||||
{
|
|
||||||
for(int col = 0; col<matrix1.cols; col++)
|
|
||||||
{
|
|
||||||
matrix2Wert = getMatrixAt(matrix2, 0, col);
|
|
||||||
setMatrixAt(matrix2Wert, broadcastedmatrix2, row, col);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
broadcasting = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if((matrix1.rows == matrix2.rows) && (matrix1.cols != matrix2.cols))
|
|
||||||
{
|
|
||||||
if(matrix1.cols == 1)
|
|
||||||
{
|
|
||||||
broadcastedmatrix1 = createMatrix(matrix2.rows, matrix2.cols);
|
|
||||||
|
|
||||||
for(int row = 0; row<matrix2.rows; row++)
|
|
||||||
{
|
|
||||||
for(int col = 0; col<matrix2.cols; col++)
|
|
||||||
{
|
|
||||||
matrix1Wert = getMatrixAt(matrix1, row, 0);
|
|
||||||
setMatrixAt(matrix1Wert, broadcastedmatrix1, row, col);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
broadcasting = 1;
|
|
||||||
}
|
|
||||||
else if(matrix2.cols == 1)
|
|
||||||
{
|
|
||||||
broadcastedmatrix2 = createMatrix(matrix1.rows, matrix1.cols);
|
|
||||||
|
|
||||||
for(int row = 0; row<matrix1.rows; row++)
|
|
||||||
{
|
|
||||||
for(int col = 0; col<matrix1.cols; col++)
|
|
||||||
{
|
|
||||||
matrix2Wert = getMatrixAt(matrix2, row, 0);
|
|
||||||
setMatrixAt(matrix2Wert, broadcastedmatrix2, row, col);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
broadcasting = 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//printf("Fehler bei Addition: Matrix Dimensionen stimmen nicht ueberein!\n");
|
//printf("Fehler bei Addition: Matrix Dimensionen stimmen nicht ueberein!\n");
|
||||||
Matrix empty = {0, 0, NULL};
|
Matrix empty = {0, 0, NULL};
|
||||||
return empty;
|
return empty;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Matrix ergebnisMatrix;
|
//Hier broadcasting noch einfuegen
|
||||||
|
|
||||||
switch (broadcasting)
|
float matrix1Wert = 0;
|
||||||
{
|
float matrix2Wert = 0;
|
||||||
case 0:
|
float summe = 0;
|
||||||
case 2:
|
|
||||||
ergebnisMatrix = createMatrix(matrix1.rows, matrix1.cols);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
Matrix ergebnisMatrix = createMatrix(matrix1.rows, matrix1.cols);
|
||||||
ergebnisMatrix = createMatrix(matrix2.rows, matrix2.cols);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int row = 0; row < ergebnisMatrix.rows; row++)
|
for(int row = 0; row < ergebnisMatrix.rows; row++)
|
||||||
{
|
{
|
||||||
for(int col = 0; col < ergebnisMatrix.cols; col++)
|
for(int col = 0; col < ergebnisMatrix.cols; col++)
|
||||||
{
|
{
|
||||||
if(broadcasting == 0)
|
matrix1Wert = getMatrixAt(matrix1, row, col);
|
||||||
{
|
matrix2Wert = getMatrixAt(matrix2, row, col);
|
||||||
matrix1Wert = getMatrixAt(matrix1, row, col);
|
summe = matrix1Wert + matrix2Wert;
|
||||||
matrix2Wert = getMatrixAt(matrix2, row, col);
|
|
||||||
summe = matrix1Wert + matrix2Wert;
|
|
||||||
}
|
|
||||||
else if(broadcasting == 1)
|
|
||||||
{
|
|
||||||
matrix1Wert = getMatrixAt(broadcastedmatrix1, row, col);
|
|
||||||
matrix2Wert = getMatrixAt(matrix2, row, col);
|
|
||||||
summe = matrix1Wert + matrix2Wert;
|
|
||||||
}
|
|
||||||
else if(broadcasting == 2)
|
|
||||||
{
|
|
||||||
matrix1Wert = getMatrixAt(matrix1, row, col);
|
|
||||||
matrix2Wert = getMatrixAt(broadcastedmatrix2, row, col);
|
|
||||||
summe = matrix1Wert + matrix2Wert;
|
|
||||||
}
|
|
||||||
|
|
||||||
setMatrixAt(summe, ergebnisMatrix, row, col);
|
setMatrixAt(summe, ergebnisMatrix, row, col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clearMatrix(&broadcastedmatrix1);
|
|
||||||
clearMatrix(&broadcastedmatrix2);
|
|
||||||
|
|
||||||
return ergebnisMatrix;
|
return ergebnisMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user