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); } }
private static void ProcessDataDelete(IMatrixData mdata, Parameters param) { int groupColInd = param.GetSingleChoiceParam("Category row").Value; mdata.RemoveCategoryRowAt(groupColInd); }
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); } }