/// <summary> /// Converts the given matrix to an indexed matrix /// </summary> /// <param name='m'> /// M. /// </param> public static IndexedMatrix ToIndexedMatrix(Matrix <double> matrix) { IndexedMatrix imat = matrix as IndexedMatrix; if (imat != null) { return(imat); } IIndexByName index = null; DenseMatrix dmat = matrix as DenseMatrix; if (dmat != null) { return(new IndexedMatrix(dmat.Values, dmat.RowCount, dmat.ColumnCount, index, index)); } imat = new IndexedMatrix(matrix.RowCount, matrix.ColumnCount, index, index); for (int ri = 0; ri < matrix.RowCount; ri++) { for (int ci = 0; ci < matrix.ColumnCount; ci++) { imat[ri, ci] = matrix[ri, ci]; } } return(imat); }
/// <summary> /// Maps across enumerable, creating matrix, mapping function provides vector for each row /// </summary> /// <param name="src">Source.</param> /// <param name="mapping">Mapping.</param> public static Matrix <double> MapToMatrixByRow <V> (IEnumerable <V> src, Func <V, Vector <double> > mapping) { var tmpl = mapping(First(src)); var nrows = Length(src); var ncols = tmpl.Count; IIndexByName index = null; if (tmpl is IndexedVector) { index = ((IndexedVector)tmpl).Indices; } var mat = new IndexedMatrix(nrows, ncols, null, index); var ri = 0; foreach (var v in src) { var rvec = mapping(v); if (rvec.Count != ncols) { throw new ArgumentException("ncols does not match mapping function vector size"); } for (int ci = 0; ci < ncols; ci++) { mat [ri, ci] = rvec [ci]; } ri++; } return(mat); }
/// <summary> /// Create matrix with named indices and also allow matrix to grow # of columns (if Initialize.Alloc rather than Initialize.Size) /// </summary> /// <param name='rows'> /// Rows. /// </param> /// <param name='cols'> /// Cols. /// </param> /// <param name='rownames'> /// Rownames. /// </param> /// <param name='colnames'> /// Colnames. /// </param> /// <param name='init'> /// Indicate whether rows/cols represent total size (Initialize.Size) or whether cols represents a allocation (Initialize.Alloc) /// </param> public IndexedMatrix( int rows, int cols, IIndexByName rownames = null, IIndexByName colnames = null) : base(rows, cols) { _rowindices = rownames; _colindices = colnames; }
/// <summary> /// Initializes a new instance of the <see cref="bridge.math.matrix.IndexedMatrix"/> class. /// </summary> /// <param name="src">Source matrix.</param> /// <param name="rownames">Row names.</param> /// <param name="colnames">Col names.</param> public IndexedMatrix( Matrix <double> src, IIndexByName rownames = null, IIndexByName colnames = null) : base(src.RowCount, src.ColumnCount) { _rowindices = rownames; _colindices = colnames; src.CopyTo(this); }
/// <summary> /// Combine vectors as columns to create new matrix /// </summary> /// <param name="cvecs">Column vector list</param> public static Matrix <double> CBind(Vector <double>[] cvecs) { var v1 = cvecs [0]; IIndexByName idx = (v1 is IndexedVector) ? ((IndexedVector)v1).Indices : null; var mat = new IndexedMatrix(v1.Count, cvecs.Length, idx, null); for (int ci = 0; ci < cvecs.Length; ci++) { var v = cvecs [ci]; for (int ri = 0; ri < v1.Count; ri++) { mat [ri, ci] = v [ri]; } } return(mat); }
/// <summary> /// Determines whether indexed matrix contains a seried of quotes, based on column headers /// </summary> public static bool IsQuotes(IndexedMatrix m) { IIndexByName colnames = m.ColIndices; if (colnames == null) { return(false); } var ordering = colnames.Ordering; if (ordering.ContainsKey("bid") || ordering.ContainsKey("Bid")) { return(true); } else { return(false); } }
/// <summary> /// Initializes a new vector with data array /// </summary> /// <param name="data">raw vector in form of array</param> /// <param name='names'>Optional name-based index</param> public IndexedVector(double[] data, IIndexByName names = null) : base(data) { _index = names; }
/// <summary> /// Initializes a new vector with given size /// </summary> /// <param name='size'> /// length of vector /// </param> /// <param name='names'> /// Optional name-based index /// </param> public IndexedVector(int size, IIndexByName names = null) : base(size) { _index = names; }