コード例 #1
0
    // construct clone dictionary by insert or remove single label
    public static void UpdateDicByAction(Dictionary <double, double>[] dicLabelAmount, double[] singleLabel, GiniHelper.ActionType action)
    {
        int labelDim = dicLabelAmount.Count();

        for (int dim = 0; dim < labelDim; dim++)
        {
            var dimLabel = singleLabel[dim];
            if (dicLabelAmount[dim].ContainsKey(dimLabel))
            {
                switch (action)
                {
                case ActionType.Insert:
                    dicLabelAmount[dim][dimLabel]++;
                    break;

                case ActionType.Remove:
                    dicLabelAmount[dim][dimLabel]--;
                    break;
                }
            }
            else
            {
                switch (action)
                {
                case ActionType.Insert:
                    dicLabelAmount[dim][dimLabel] = 1;
                    break;

                case ActionType.Remove:
                    // label not in a dic, do nothing
                    break;
                }
            }
            //clean from dic labels with zero amount
            foreach (var item in dicLabelAmount[dim].Where(kvp => kvp.Value == 0).ToList())
            {
                dicLabelAmount[dim].Remove(item.Key);
            }
        }
    }
コード例 #2
0
    public static double GetGiniByAction(Dictionary <double, double>[] dicLabelAmount, double[] singleLabel, GiniHelper.ActionType action, int numOfLabels)
    {
        var labelDim = singleLabel.Count();

        UpdateDicByAction(dicLabelAmount, singleLabel, action);
        return(GetGiniValueByDictionary(dicLabelAmount, numOfLabels));
    }