//saves the final result matrix as dataAttributes/dataItems -> SimpleDataModel
    private void EncodeResultToSimpleDataModel()
    {
        for (var i = 1; i <= K; i++)
        {
            for (var j = 1; j <= _input.Count; j++)
            {
                if (_clusterMatrix[i, j] != Vector3.zero)
                {
                    var dataItem = new DataItem();

                    var x        = new DataAttribute();
                    var y        = new DataAttribute();
                    var z        = new DataAttribute();
                    var centroid = new DataAttribute();

                    var valueX        = _clusterMatrix[i, j].x;
                    var valueY        = _clusterMatrix[i, j].y;
                    var valueZ        = _clusterMatrix[i, j].z;
                    var valueCentroid = (float)i;

                    x.Init(j, "x", valueX + "", DataAttribute.Valuetype.ValFloat);
                    y.Init(j, "y", valueY + "", DataAttribute.Valuetype.ValFloat);
                    z.Init(j, "z", valueZ + "", DataAttribute.Valuetype.ValFloat);
                    centroid.Init(0, "centroid", valueCentroid + "", DataAttribute.Valuetype.ValFloat);

                    dataItem.Add(x);
                    dataItem.Add(y);
                    dataItem.Add(z);
                    dataItem.Add(centroid);

                    _simpleDataModel.Add(dataItem);
                }
            }
        }
    }
        private GenericDatamodel ReadCsv()
        {
            GenericDatamodel dataModel = new SimpleDatamodel();

            var pathToData = _path + _filename;

            if (File.Exists(pathToData))
            {
                var fileContent = System.IO.File.ReadAllLines(pathToData);

                if (fileContent.Length == 0)
                {
                    throw new FileLoadException("Empty file!");
                }

                var start           = 0;
                var attributeTitles = TrimStringArray(fileContent[0].Split(_delimiter.ToCharArray()));
                if (!_hasHeader)
                {
                    for (var i = 0; i < attributeTitles.Length; i++)
                    {
                        attributeTitles[i] = "Column_" + (i + 1);
                    }
                }
                else
                {
                    start++;
                }

                var datatypes = new DataAttribute.Valuetype[attributeTitles.Length];
                var firstRow  = TrimStringArray(fileContent[start].Split(_delimiter.ToCharArray()));
                for (var i = 0; i < firstRow.Length; i++)
                {
                    datatypes[i] = DataAttribute.GetDataType(firstRow[i]);
                }

                for (var i = start; i < fileContent.Length; i++)
                {
                    var dataItem   = new DataItem();
                    var attributes = TrimStringArray(fileContent[i].Split(_delimiter.ToCharArray()));
                    if (attributes.Length != attributeTitles.Length)
                    {
                        throw new FileLoadException("Can not load " + pathToData + ". Row " + i + " does not contain the same amount of columns than the first row(" + attributeTitles.Length + ").");
                    }
                    ;

                    for (var j = 0; j < attributes.Length; j++)
                    {
                        var dataAttribute = new DataAttribute();
                        dataAttribute.Init(j, attributeTitles[j], attributes[j], datatypes[j]);
                        dataItem.Add(dataAttribute);
                    }
                    dataModel.Add(dataItem);
                }

                if ((_hasHeader && fileContent.Length - 1 != dataModel.GetDataItems().Count) || (!_hasHeader && fileContent.Length != dataModel.GetDataItems().Count))
                {
                    throw new FileLoadException("Incomplete Parsing! Not all rows were transformed imported as data items!");
                }
                ;

                return(dataModel);
            }
            else
            {
                throw new FileLoadException("Did not find file '" + pathToData + "'.");
            }
        }