Example #1
0
        private float[] NormaliseCol(float[,] dataArray, DataMetadata metadataPreset, int col)
        {
            //for each dimensions (column) normalise all data
            float[] result = GetCol(dataArray, col);
            float minDimension = result.Min();
            float maxDimension = result.Max();

            if (minDimension == maxDimension)
            {
                // where there are no distinct values, need the dimension to be distinct 
                // otherwise lots of maths breaks with division by zero, etc.
                // this is the most elegant hack I could think of, but should be fixed properly in future
                minDimension -= 1.0f; 
                maxDimension += 1.0f;
            }

            DataSource.DimensionData.Metadata metadata = dimensionData[col].MetaData;

            metadata.minValue = minDimension;
            metadata.maxValue = maxDimension;
            metadata.categories = result.Distinct().Select(x => normaliseValue(x, minDimension, maxDimension, 0.0f, 1.0f)).ToArray();
            metadata.categoryCount = metadata.categories.Count();
            metadata.binCount = (int)(maxDimension - minDimension + 1);

            if (metadataPreset != null)
            {
                foreach (var binSizePreset in metadataPreset.BinSizePreset)
                {
                    if (binSizePreset.index == col)
                    {
                        metadata.binCount = binSizePreset.binCount;
                    }
                }
            }

            dimensionData[col].setMetadata(metadata);

            for (int j = 0; j < result.Length; j++)
            {
                if (minDimension < maxDimension)
                {
                    result[j] = normaliseValue(result[j], minDimension, maxDimension, 0f, 1f);
                }
                else
                {
                    // avoid NaNs or nonsensical normalization
                    result[j] = 0;
                }
            }

            return result;
        }
Example #2
0
        /// <summary>
        /// internal function: normalises all the data input between 0 and 1
        /// </summary>
        private float[,] normaliseArray(float[,] dataArray, DataMetadata metadataPreset)
        {
            //1 make a copy of the parsed array
            float[,] normArray = new float[dataArray.GetUpperBound(0) + 1, dataArray.GetUpperBound(1) + 1];
            //for each dimensions (column) normalise all data
            for (int i = 0; i <= normArray.GetUpperBound(1); i++)
            {
                float[] rawDimension = GetCol(dataArray, i);
                float minDimension = rawDimension.Min();
                float maxDimension = rawDimension.Max();

                DataSource.DimensionData.Metadata metadata = dimensionData[i].MetaData;

                metadata.minValue = minDimension;
                metadata.maxValue = maxDimension;
                metadata.binCount = (int)(maxDimension - minDimension + 1);

                if (metadataPreset != null)
                {
                    foreach (var binSizePreset in metadataPreset.BinSizePreset)
                    {
                        if (binSizePreset.index == i)
                        {
                            metadata.binCount = binSizePreset.binCount;
                        }
                    }
                }

                dimensionData[i].setMetadata(metadata);

                float[] normalisedDimension = new float[rawDimension.Length];

                //                dimensionsRange.Add(i, new Vector2(minDimension, maxDimension));

                for (int j = 0; j < rawDimension.Length; j++)
                {
                    if (minDimension < maxDimension)
                    {
                        normalisedDimension[j] = normaliseValue(rawDimension[j], minDimension, maxDimension, 0f, 1f);
                    }
                    else
                    {
                        // avoid NaNs or nonsensical normalization
                        normalisedDimension[j] = 0;
                    }
                }

                SetCol<float>(normArray, i, normalisedDimension);
            }

            return normArray;
        }
Example #3
0
        private float[] NormaliseCol(float[,] dataArray, DataMetadata metadataPreset, int col)
        {
            //for each dimensions (column) normalise all data
            float[] result = GetCol(dataArray, col);
            float minDimension = result.Min();
            float maxDimension = result.Max();

            DataSource.DimensionData.Metadata metadata = dimensionData[col].MetaData;

            metadata.minValue = minDimension;
            metadata.maxValue = maxDimension;
            metadata.categories = result.Distinct().Select(x => normaliseValue(x, minDimension, maxDimension, 0.0f, 1.0f)).ToArray();
            metadata.categoryCount = result.Distinct().Count();
            metadata.binCount = (int)(maxDimension - minDimension + 1);

            if (metadataPreset != null)
            {
                foreach (var binSizePreset in metadataPreset.BinSizePreset)
                {
                    if (binSizePreset.index == col)
                    {
                        metadata.binCount = binSizePreset.binCount;
                    }
                }
            }

            dimensionData[col].setMetadata(metadata);

            for (int j = 0; j < result.Length; j++)
            {
                if (minDimension < maxDimension)
                {
                    result[j] = normaliseValue(result[j], minDimension, maxDimension, 0f, 1f);
                }
                else
                {
                    // avoid NaNs or nonsensical normalization
                    result[j] = 0;
                }
            }

            return result;
        }