コード例 #1
0
        public static PropertyMapping <T>[] Read(StreamReader sr)
        {
            //read head line that tells mapping count, variable names
            string line  = sr.ReadLine();
            var    strs  = TypeConverterEx.Split <string>(line, 1);
            int    layer = int.Parse(strs[0]);

            PropertyMapping <T> [] maps = new PropertyMapping <T> [layer];

            for (int l = 0; l < layer; l++)
            {
                line = sr.ReadLine();
                strs = TypeConverterEx.Split <string>(line, 1);
                int num = int.Parse(strs[0]);
                line = sr.ReadLine();
                var varnam = TypeConverterEx.SkipSplit <string>(line, 1);
                var ids    = new string[num];
                var values = new T[num, varnam.Length];
                for (int i = 0; i < num; i++)
                {
                    line   = sr.ReadLine();
                    strs   = TypeConverterEx.Split <string>(line);
                    ids[i] = strs[0];
                    var row = TypeConverterEx.SkipSplit <T>(line, 1);
                    MatrixExtension <T> .AssignRow(values, i, row);
                }
                PropertyMapping <T> map = new PropertyMapping <T>(ids, varnam, values);
                maps[l] = map;
            }
            return(maps);
        }
コード例 #2
0
        public static PropertyMapping <float>[] Read(string excelfile, string sheet, int nlayer)
        {
            FileStream       stream      = File.Open(excelfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

            excelReader.IsFirstRowAsColumnNames = true;
            System.Data.DataSet result = excelReader.AsDataSet();
            var dt     = result.Tables[sheet];
            var dtEnum = dt.AsEnumerable();
            int num    = dt.Rows.Count;

            PropertyMapping <float>[] maps = new PropertyMapping <float> [nlayer];
            for (int l = 0; l < nlayer; l++)
            {
                var ids = from r in dtEnum select r.Field <double>("ID" + (l + 1)).ToString();

                string[] varnam = new string[5];
                var      values = new float[num, varnam.Length];
                for (int i = 1; i < 6; i++)
                {
                    varnam[i - 1] = dt.Columns[l * 6 + i].ColumnName;
                    var colvec = from r in dtEnum select float.Parse(r.Field <double>(varnam[i - 1]).ToString());

                    MatrixExtension <float> .AssignColumn(values, i - 1, colvec.ToArray());
                }
                PropertyMapping <float> map = new PropertyMapping <float>(ids.ToArray(), varnam, values);
                maps[l] = map;
            }

            return(maps);
        }
コード例 #3
0
        public PropertyMapping(string[] ids, string var, T[] values)
        {
            mVarNames  = new string[] { var };
            mVarValues = new T[ids.Length, 1];
            MatrixExtension <T> .AssignColumn(mVarValues, 0, values);

            mIDs = ids;
            Build();
        }
コード例 #4
0
        private void Build()
        {
            MappingCount  = mIDs.Length;
            VariableCount = mVarNames.Length;
            Mappings      = new Dictionary <string, T[]>();
            Variables     = new Dictionary <string, string>();

            for (int i = 0; i < VariableCount; i++)
            {
                Variables.Add(mIDs[i], mVarNames[i]);
            }
            for (int i = 0; i < MappingCount; i++)
            {
                Mappings.Add(mIDs[i], MatrixExtension <T> .GetRow(i, mVarValues));
            }
        }
コード例 #5
0
        public static float[][] Summerize(float[][][] matrix, int[] intevals, int flag)
        {
            int len   = matrix[0].Length;
            int steps = intevals.Length;
            int nfea  = matrix[0][0].Length;
            int nvar  = matrix.Length;

            float[][] stat = new float[nvar][];
            for (int v = 0; v < nvar; v++)
            {
                stat[v] = new float[steps];
            }
            float[] temp = new float[nfea];
            int     cur  = 0;

            for (int v = 0; v < nvar; v++)
            {
                for (int s = 0; s < steps; s++)
                {
                    int inteval = intevals[s];
                    for (int t = 0; t < inteval; t++)
                    {
                        for (int i = 0; i < nfea; i++)
                        {
                            temp[i] += matrix[v][cur][i];
                        }
                        cur++;
                    }
                    if (flag == 1)
                    {
                        stat[v][s] = temp.Average() / inteval;
                    }
                    else if (flag == 2)
                    {
                        stat[v][s] = temp.Sum() / inteval;
                    }
                    MatrixExtension <float> .Set(temp, 0);
                }
            }

            return(stat);
        }