コード例 #1
0
ファイル: MatrixUtils.cs プロジェクト: jar1karp/.Net-Bridge
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: IndexedMatrix.cs プロジェクト: jar1karp/.Net-Bridge
        /// <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;
        }
コード例 #4
0
ファイル: IndexedMatrix.cs プロジェクト: jar1karp/.Net-Bridge
        /// <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);
        }
コード例 #5
0
ファイル: MatrixUtils.cs プロジェクト: jar1karp/.Net-Bridge
        /// <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);
        }
コード例 #6
0
ファイル: MatrixUtils.cs プロジェクト: jar1karp/.Net-Bridge
        /// <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);
            }
        }
コード例 #7
0
 /// <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;
 }
コード例 #8
0
 /// <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;
 }