コード例 #1
0
 private static void FillMatrixDontKeep(int groupColInd, int validVals, IMatrixData mdata,
                                        Func <IList <double>, double> func)
 {
     string[][] groupCol   = mdata.GetCategoryRowAt(groupColInd);
     string[]   groupNames = ArrayUtils.UniqueValuesPreserveOrder(groupCol);
     int[][]    colInds    = PerseusPluginUtils.GetMainColIndices(groupCol, groupNames);
     double[,] newExCols  = new double[mdata.RowCount, groupNames.Length];
     double[,] newQuality = new double[mdata.RowCount, groupNames.Length];
     bool[,] newImputed   = new bool[mdata.RowCount, groupNames.Length];
     for (int i = 0; i < newExCols.GetLength(0); i++)
     {
         for (int j = 0; j < newExCols.GetLength(1); j++)
         {
             List <double> vals = new List <double>();
             List <bool>   imps = new List <bool>();
             foreach (int ind in colInds[j])
             {
                 double val = mdata.Values.Get(i, ind);
                 if (!double.IsNaN(val) && !double.IsInfinity(val))
                 {
                     vals.Add(val);
                     imps.Add(mdata.IsImputed[i, ind]);
                 }
             }
             bool   imp = false;
             double xy  = double.NaN;
             if (vals.Count >= validVals)
             {
                 xy  = func(vals);
                 imp = ArrayUtils.Or(imps);
             }
             newExCols[i, j]  = xy;
             newQuality[i, j] = double.NaN;
             newImputed[i, j] = imp;
         }
     }
     mdata.ColumnNames        = new List <string>(groupNames);
     mdata.ColumnDescriptions = GetEmpty(groupNames);
     mdata.Values.Set(newExCols);
     mdata.Quality.Set(newQuality);
     mdata.IsImputed.Set(newImputed);
     mdata.RemoveCategoryRowAt(groupColInd);
     for (int i = 0; i < mdata.CategoryRowCount; i++)
     {
         mdata.SetCategoryRowAt(AverageCategoryRow(mdata.GetCategoryRowAt(i), colInds), i);
     }
     for (int i = 0; i < mdata.NumericRows.Count; i++)
     {
         mdata.NumericRows[i] = AverageNumericRow(mdata.NumericRows[i], colInds);
     }
 }
コード例 #2
0
 private static void ProcessDataDelete(IMatrixData mdata, Parameters param)
 {
     int groupColInd = param.GetSingleChoiceParam("Category row").Value;
     mdata.RemoveCategoryRowAt(groupColInd);
 }
コード例 #3
0
        private static void FillMatrixDontKeep(int groupColInd, int validVals, IMatrixData mdata,
			Func<IList<double>, double> func)
        {
            string[][] groupCol = mdata.GetCategoryRowAt(groupColInd);
            string[] groupNames = ArrayUtils.UniqueValuesPreserveOrder(groupCol);
            int[][] colInds = PerseusPluginUtils.GetExpressionColIndices(groupCol, groupNames);
            float[,] newExCols = new float[mdata.RowCount,groupNames.Length];
            float[,] newQuality = new float[mdata.RowCount,groupNames.Length];
            bool[,] newImputed = new bool[mdata.RowCount,groupNames.Length];
            for (int i = 0; i < newExCols.GetLength(0); i++){
                for (int j = 0; j < newExCols.GetLength(1); j++){
                    List<double> vals = new List<double>();
                    List<bool> imps = new List<bool>();
                    foreach (int ind in colInds[j]){
                        double val = mdata[i, ind];
                        if (!double.IsNaN(val) && !double.IsInfinity(val)){
                            vals.Add(val);
                            imps.Add(mdata.IsImputed[i, ind]);
                        }
                    }
                    bool imp = false;
                    float xy = float.NaN;
                    if (vals.Count >= validVals){
                        xy = (float) func(vals);
                        imp = ArrayUtils.Or(imps);
                    }
                    newExCols[i, j] = xy;
                    newQuality[i, j] = float.NaN;
                    newImputed[i, j] = imp;
                }
            }
            mdata.ExpressionColumnNames = new List<string>(groupNames);
            mdata.ExpressionColumnDescriptions = GetEmpty(groupNames);
            mdata.ExpressionValues = newExCols;
            mdata.QualityValues = newQuality;
            mdata.IsImputed = newImputed;
            mdata.RemoveCategoryRowAt(groupColInd);
            for (int i = 0; i < mdata.CategoryRowCount; i++){
                mdata.SetCategoryRowAt(AverageCategoryRow(mdata.GetCategoryRowAt(i), colInds), i);
            }
            for (int i = 0; i < mdata.NumericRows.Count; i++){
                mdata.NumericRows[i] = AverageNumericRow(mdata.NumericRows[i], colInds);
            }
        }