Esempio n. 1
0
        /// <summary>
        /// Requirements:
        /// (1) all the data points are indexed from 0 ... cDataCountsTotal
        /// (2) all data points belongs to one group are contingious
        /// </summary>
        /// <param name="groupId">maps a data point to its group ID</param>
        public DataGroups(LabelFeatureCore labelFeatureCore)
        {
            NumDataPoints = labelFeatureCore.NumDataPoint;

            List<int> listGroupId = new List<int>();
            List<int> listStartIdx = new List<int>();

            listGroupId.Add(labelFeatureCore.GetGroupId(0));
            listStartIdx.Add(0);
            int curID = labelFeatureCore.GetGroupId(0);
            for (int i = 0; i < NumDataPoints; i++)
            {
                int nextID = labelFeatureCore.GetGroupId(i);
                if (nextID != curID)
                {
                    listStartIdx.Add(i);
                    listGroupId.Add(nextID);
                    curID = nextID;
                }
            }

            groupCounts = listStartIdx.Count;
            dataGroups = new DataGroup[groupCounts];

            for (int i = 0; i < groupCounts; i++)
            {
                dataGroups[i] = new DataGroup();
                dataGroups[i].id = listGroupId[i];
                dataGroups[i].iStart = listStartIdx[i];
                if (i < groupCounts - 1)
                {
                    dataGroups[i].cSize = listStartIdx[i + 1] - listStartIdx[i];
                }
                else
                {
                    dataGroups[i].cSize = NumDataPoints - listStartIdx[i];
                }
            }
        }