/* * Load dense matrix and transpose it. */ public static DenseMatrix DenseMatrixTransposeLoader(string DenseMatrixFileName) { StreamReader DenseMatrixFile = new StreamReader(DenseMatrixFileName); // Scan the data file to determine the dimension of the matrix int nCol = 0; int nRow = 0; string StrLine; while ((StrLine = DenseMatrixFile.ReadLine()) != null) { if (nCol == 0) { string[] StrLineSplit = StrLine.Split('\t'); nRow = StrLineSplit.Length; } ++nCol; } DenseMatrixFile.Close(); // Load the data and store it into the matrix DenseMatrix Matrix = new DenseMatrix(nRow, nCol); DenseMatrixFile = new StreamReader(DenseMatrixFileName); int IdxCol = 0; while ((StrLine = DenseMatrixFile.ReadLine()) != null) { float[] LoadedColumn = new float[nRow]; string[] StrLineSplit = StrLine.Split('\t'); for (int IdxRow = 0; IdxRow < nRow; ++IdxRow) { LoadedColumn[IdxRow] = float.Parse(StrLineSplit[IdxRow]); } Matrix.FillColumn(LoadedColumn, IdxCol); ++IdxCol; } DenseMatrixFile.Close(); return(Matrix); }
/// <summary> /// 读取文件 /// </summary> /// <param name="FileName"></param> /// <returns></returns> private bool ReadFile(string FileName) { //参数定义 FileStream fs = null; StreamReader sr = null; //每行字符串 string StrLine; //行数 int LineCount = 0; //文本中一共多少个字符 int StrCharCount = 0; int TrajIndex = -1; int PointType = 0; try { if (FileName == null || !File.Exists(FileName)) { MessageBox.Show("文件不存在!"); return(false); } fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); sr = new StreamReader(fs); //使用StreamReader类来读取文件 sr.BaseStream.Seek(0, SeekOrigin.Begin); while ((StrLine = sr.ReadLine()) != null) { LineCount++; StrLine = StrLine.Trim(); if (StrLine == "" || StrLine.IndexOf("//") >= 0) { continue; } StrCharCount = StrLine.Length; //读取productname if (StrLine.IndexOf("PRODUCTID=") >= 0) { PublicData.ProductName = StrLine.Substring("PRODUCTID=".Length, StrCharCount - "PRODUCTID=".Length); } if (StrLine.IndexOf("PRESET=") >= 0) { PublicData.PresetName = StrLine.Substring("PRESET=".Length, StrCharCount - "PRESET=".Length); } if (StrLine.IndexOf("TOTALELEMENTS=") >= 0) { PublicData.TrajCount = int.Parse(StrLine.Substring("TOTALELEMENTS=".Length, StrCharCount - "TOTALELEMENTS=".Length)); TrajInform = new Traj[PublicData.TrajCount]; } if (StrLine.IndexOf("=BEGIN") >= 0) { TrajIndex++; PointType = 0; TrajInform[TrajIndex] = new Traj(); } //轨迹坐标系 if (StrLine.IndexOf("FRAME=") == 0) { string[] Data = (StrLine.Substring("FRAME=".Length, StrCharCount - "FRAME=".Length)).Split(','); if (Data == null || Data.Length < 6) { return(false); } Str2double(Data, ref TrajInform[TrajIndex].TrajFrame); } //产品坐标系 if (StrLine.IndexOf("RECIPEFRAME=") == 0) { string[] Data = (StrLine.Substring("RECIPEFRAME=".Length, StrCharCount - "RECIPEFRAME=".Length)).Split(','); if (Data == null || Data.Length < 6) { return(false); } Str2double(Data, ref PublicData.Frame); } if (StrLine.IndexOf("HOME=") >= 0) { string[] Data = (StrLine.Substring("HOME=".Length, StrCharCount - "HOME=".Length)).Split(','); if (Data == null || Data.Length < 6) { return(false); } Str2double(Data, ref PublicData.Home); } if (StrLine.IndexOf("TOOL=") >= 0) { string[] Data = (StrLine.Substring("TOOL=".Length, StrCharCount - "TOOL=".Length)).Split(','); if (Data == null || Data.Length < 6) { return(false); } Str2double(Data, ref PublicData.Tcp); } if (StrLine.IndexOf("LASER=OFF") >= 0) { PointType = 2; } if (StrLine.IndexOf("LASER=ON") >= 0) { PointType = 1; } if (StrLine.IndexOf("MOVEL=") >= 0) { string[] Data = (StrLine.Substring("MOVEL=".Length, StrCharCount - "MOVEL=".Length)).Split(new char[] { ',', '/' }); switch (PointType) { //趋近点 case 0: { TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]] = new double[2]; Str2double(Data, ref TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]]); Str2double(Data, ref TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]], 6); TrajInform[TrajIndex].Before[TrajInform[TrajIndex].PointCount[PointType]] = true; break; } //切割点 case 1: { TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]] = new double[4]; Str2double(Data, ref TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]]); Str2double(Data, ref TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]], 6); TrajInform[TrajIndex].Mid[TrajInform[TrajIndex].PointCount[PointType]] = false; break; } //切出点 case 2: { TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]] = new double[2]; Str2double(Data, ref TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]]); Str2double(Data, ref TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]], 6); TrajInform[TrajIndex].After[TrajInform[TrajIndex].PointCount[PointType]] = true; break; } } TrajInform[TrajIndex].PointCount[PointType]++; } // if (StrLine.IndexOf("MOVEC=") >= 0) { string[] Data = (StrLine.Substring("MOVEC=".Length, StrCharCount - "MOVEC=".Length)).Split(new char[] { ',', '/' }); if (PointType == 0 || PointType == 2) { return(false); } TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].MidMC[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]] = new double[4]; Str2double(Data, ref TrajInform[TrajIndex].Midpoint[TrajInform[TrajIndex].PointCount[PointType]]); Str2double(Data, ref TrajInform[TrajIndex].MidMC[TrajInform[TrajIndex].PointCount[PointType]], 6); Str2double(Data, ref TrajInform[TrajIndex].MidPara[TrajInform[TrajIndex].PointCount[PointType]], 12); TrajInform[TrajIndex].Mid[TrajInform[TrajIndex].PointCount[PointType]] = true; TrajInform[TrajIndex].PointCount[PointType]++; } //movej if (StrLine.IndexOf("MOVEJ=") >= 0) { string[] Data = (StrLine.Substring("MOVEJ=".Length, StrCharCount - "MOVEJ=".Length)).Split(new char[] { ',', '/' }); if (PointType == 1) { return(false); } switch (PointType) { //趋近点 case 0: { TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]] = new double[2]; Str2double(Data, ref TrajInform[TrajIndex].Beforepoint[TrajInform[TrajIndex].PointCount[PointType]]); Str2double(Data, ref TrajInform[TrajIndex].BeforePara[TrajInform[TrajIndex].PointCount[PointType]], 6); TrajInform[TrajIndex].Before[TrajInform[TrajIndex].PointCount[PointType]] = false; break; } //切出点 case 2: { TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]] = new double[6]; TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]] = new double[2]; Str2double(Data, ref TrajInform[TrajIndex].Afterpoint[TrajInform[TrajIndex].PointCount[PointType]]); Str2double(Data, ref TrajInform[TrajIndex].AfterPara[TrajInform[TrajIndex].PointCount[PointType]], 6); TrajInform[TrajIndex].After[TrajInform[TrajIndex].PointCount[PointType]] = false; break; } } TrajInform[TrajIndex].PointCount[PointType]++; } } return(true); } catch { // MessageBox.Show(ex.Message + LineCount.ToString()); return(false); } finally { if (fs != null) { fs.Close(); } if (sr != null) { sr.Close(); } } }
// sParseLine() // Simple parsing, does not check for quotes containing commas, nor trim quotes. // Converts StrLine to an array as ArrLine public void sParseLine() { ArrLine = StrLine.Split(commaDelim); }
/* * Load ParamModel from file */ public static paramModel_t ParamModelHyperParamLoader(string ParamModelHyperParamFileName) { paramModel_t ParamModel = new paramModel_t(); using (StreamReader ParamModelFile = new StreamReader(ParamModelHyperParamFileName)) { string StrLine; while ((StrLine = ParamModelFile.ReadLine()) != null) { string[] StrLineSplit = StrLine.Split('\t'); string Key = StrLineSplit[0]; string Val = StrLineSplit[1]; switch (Key) { case "nHid": ParamModel.nHid = int.Parse(Val); break; case "nHidLayer": ParamModel.nHidLayer = int.Parse(Val); break; case "To": ParamModel.To = float.Parse(Val); break; case "nOutput": ParamModel.nOutput = int.Parse(Val); break; case "nInput": ParamModel.nInput = int.Parse(Val); break; case "eta": ParamModel.eta = float.Parse(Val); break; case "alpha": ParamModel.alpha = float.Parse(Val); break; case "beta": ParamModel.beta = float.Parse(Val); break; case "T_value": ParamModel.T_value = float.Parse(Val); break; case "OutputType": ParamModel.OutputType = Val; break; default: throw new Exception("Unknown type of Key in hyperparameter file."); } } ParamModel.T = new float[ParamModel.nHidLayer]; for (int Idx = 0; Idx < ParamModel.T.Length; ++Idx) { ParamModel.T[Idx] = ParamModel.T_value; } ParamModel.b = new DenseColumnVector(ParamModel.nHid, ParamModel.alpha - 1.0f); } return(ParamModel); }