15 Commits
Author SHA1 Message Date
kachelto100370 786aa2e6d8 working on imageinput 2025-11-25 10:53:28 +01:00
kachelto100370 58df4199b5 smal gitignore 2025-11-23 16:33:44 +01:00
kachelto100370 fb18b75b60 working on imputimage 0 test passing 2025-11-23 16:33:22 +01:00
kachelto100370 7f3c6d1d3f first pass matrix add, ohne broadcasting 2025-11-20 16:04:01 +01:00
hofmannkr98890 97df88c0ab Merge pull request 'Krisp2' (#1) from Krisp2 into main
Reviewed-on: #1
2025-11-20 13:48:43 +00:00
hofmannkr98890 be07dcffcf Merge branch 'main' into Krisp2 2025-11-20 13:48:23 +00:00
Kristin 858673bdca makefile für alle Betriebssysteme 2025-11-20 14:46:14 +01:00
kachelto100370 619cd95a5c start wroking on image Input 2025-11-18 10:45:50 +01:00
Kristin 6b9711e47d Merge branch 'main' of https://git.efi.th-nuernberg.de/gitea/kachelto100370/info2Praktikum-NeuronalesNetz into Krisp2 2025-11-18 10:15:56 +01:00
kachelto100370 653312f8a6 merge upstream 2025-11-18 09:15:45 +00:00
Kristin 2b751ef931 Merge branch 'main' of https://git.efi.th-nuernberg.de/gitea/kachelto100370/info2Praktikum-NeuronalesNetz into Krisp2 2025-11-18 10:13:09 +01:00
Kristin 0081e8f89e data in buffer 2025-11-18 10:11:38 +01:00
schroederen 2436240736 Merge pull request 'matrixTests korrigiert.' (#4) from schroederen/info2Praktikum-NeuronalesNetz:main into main
Reviewed-on: freudenreichan/info2Praktikum-NeuronalesNetz#4
2025-11-17 14:07:46 +00:00
schroederen fde82f2d9a matrixTests korrigiert. 2025-11-17 15:07:03 +01:00
Kristin 3c49920613 matrix.c und matrix.h, makefile für windows 2025-11-13 20:28:48 +01:00
7 changed files with 139 additions and 37 deletions

No files matched your search

+7 -1
View File
@@ -1,4 +1,10 @@
mnist
runTests
*.o
*.exe
*.exe
.vscode/settings.json
.vscode/launch.json
.vscode/settings.json
.vscode/settings.json
runImageInputTests
testFile.info2
+33
View File
@@ -7,16 +7,49 @@
#define FILE_HEADER_STRING "__info2_image_file_format__"
// TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei
GrayScaleImage readImage()
{
}
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
GrayScaleImageSeries *readImages(const char *path)
{
unsigned short * numImages;
unsigned short * breiteBilder;
unsigned short * laengeBilder;
GrayScaleImageSeries *series = NULL;
FILE *file = fopen(*path,"rb");
char * headOfFile;
fread(headOfFile, sizeof(FILE_HEADER_STRING),1, file); //liest den header ein und überprüft ob korrekte datei
if(strcmp(headOfFile, FILE_HEADER_STRING) != 0)
return NULL;
// liest numIMages, breite und länge der Bilder ein
fseek(file, sizeof(FILE_HEADER_STRING), SEEK_SET);
fread(numImages, sizeof(short), 1, file);
fseek(file, sizeof(short), SEEK_CUR);
fread(breiteBilder, sizeof(short), 1, file);
fseek(file, sizeof(short), SEEK_CUR);
fread(laengeBilder, sizeof(short), 1, file);
series = malloc(*numImages * *breiteBilder * *laengeBilder * sizeof(short));
for(int i = 0; i < numImages; i++)
{
}
return series;
}
// TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt
void clearSeries(GrayScaleImageSeries *series)
{
}
+3 -1
View File
@@ -63,4 +63,6 @@ ifeq ($(OS),Windows_NT)
else
rm -f *.o mnist runMatrixTests runNeuralNetworkTests runImageInputTests
endif
clean für windows
clean:
rm -f *.o *.exe
+57 -25
View File
@@ -1,36 +1,68 @@
#include "matrix.h"
#include <stdlib.h>
#include <string.h>
#include "matrix.h"
// TODO Matrix-Funktionen implementieren
Matrix createMatrix(unsigned int rows, unsigned int cols)
{
MatrixType* data = malloc(rows * cols * sizeof(MatrixType));
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)
{
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 result;
const int cols1 = matrix1.cols;
const int rows1 = matrix1.rows;
const int cols2 = matrix2.cols;
const int rows2 = matrix2.rows;
const int colsEqu = (matrix1.cols == matrix2.cols) ? 1 : 0;
const int rowsEqu = (matrix1.rows == matrix2.rows) ? 1 : 0;
if(colsEqu && rowsEqu)
{
Matrix result = createMatrix(matrix1.rows, matrix1.cols);
for(int i = 0; i < rows1; i++)
{
for (int j = 0; j < cols1; j++)
{
int valueM1 = getMatrixAt(matrix1, i, j);
int valueM2 =getMatrixAt(matrix2, i, j);
int sum = valueM1 + valueM2;
setMatrixAt(sum, result,i,j);
}
}
Matrix add(const Matrix matrix1, const Matrix matrix2)
{
return result;
}
}
Matrix multiply(const Matrix matrix1, const Matrix matrix2)
{
}
Matrix multiply(const Matrix matrix1, const Matrix matrix2) { return matrix1; }
+9 -9
View File
@@ -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
+1 -1
View File
@@ -164,7 +164,7 @@ void test_setMatrixAtFailsOnIndicesOutOfRange(void)
Matrix matrixToTest = {.rows=2, .cols=3, .buffer=buffer};
setMatrixAt(-1, matrixToTest, 2, 3);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expectedResults, matrixToTest.buffer, matrixToTest.cols * matrixToTest.rows);
TEST_ASSERT_EQUAL_FLOAT_ARRAY(expectedResults, matrixToTest.buffer, sizeof(buffer)/sizeof(MatrixType));
}
void setUp(void) {
+29
View File
@@ -0,0 +1,29 @@
Inhalte: Dynamische Speicherverwaltung, Strukturen, Dateien lesen.
Ziel: Die Bilder aus mnist_test.info 2 auslesen
Struktur für einlesen des Strings am Anfang der Datei:
int AnzahlBilder
int breiteBilder
int LaengeBilder
Struktur für Bilder:
unsinged int array Breite * Höhe
unsigned int Klasse (Label 0 - 9)
Speicher für Bilder dynamisch allokieren
GrayScaleImageSeries:
datei einlesen
header String aus der Datei lesen
mit header String den benötigten Speicher freigeben
in den Speicher die Datei einschreiben (mit Hilfsfunktion)
Hilfsfunktion (saveFile)
gehe zum Anfang des Strings
speicher alles der Reihe nach ein
clearSeries:
pointer der be malloc kommt nehemen
free()