Beispiel #1
0
 /// <summary>
 /// law を利用したスケーリング
 /// </summary>
 protected static double[] scala(double d, Vector v)
 {
     VectorChecker.IsNotZeroSize(v);
     double[] ret = null;
     krdlab.law.func.dscal_r(ref ret, v._body, d);
     return(ret);
 }
Beispiel #2
0
        internal static V DivEq <V>(V v1, double val)
            where V : IRandomAccessible <double>
        {
            VectorChecker.IsNotZeroSize(v1);
            int size = v1.Size;

            for (int i = 0; i < v1.Size; ++i)
            {
                v1[i] /= val;
            }
            return(v1);
        }
Beispiel #3
0
        /// <summary>
        /// 指定されたベクトルから新しい行列を作成する.
        /// 指定された各ベクトルは,新しい行列の各列にコピーされる.
        /// </summary>
        /// <param name="arr"></param>
        public Matrix(params ColumnVector[] arr)
        {
            // 入力の検証
            VectorChecker.IsNotZeroSize(arr[0]);
            int rsize = arr[0].Size;

            MatrixChecker.EqualAllSizes(rsize, arr);
            // 構築
            int csize = arr.Length;

            Resize(rsize, csize);
            for (int c = 0; c < csize; ++c)
            {
                this.Columns[c] = arr[c];
            }
        }
Beispiel #4
0
        /// <summary>
        /// ベクトル配列から新しい行列を作成する.
        /// 指定された各ベクトルは,新しい行列の各行にコピーされる.
        /// </summary>
        /// <param name="arr"></param>
        public Matrix(params RowVector[] arr)
        {
            // 入力の検証
            VectorChecker.IsNotZeroSize(arr[0]);
            int csize = arr[0].Size;

            MatrixChecker.EqualAllSizes(csize, arr);
            // 構築
            int rsize = arr.Length;

            Resize(rsize, csize);
            for (int r = 0; r < rsize; ++r)
            {
                this.Rows[r] = arr[r];
            }
        }
Beispiel #5
0
        /// <summary>
        /// </summary>
        public static Matrix operator *(ColumnVector cv, RowVector rv)
        {
            VectorChecker.IsNotZeroSize(cv);
            VectorChecker.IsNotZeroSize(rv);
            int    rowSize = cv.Size;
            int    colSize = rv.Size;
            Matrix ret     = new Matrix(rowSize, colSize);

            for (int r = 0; r < rowSize; ++r)
            {
                for (int c = 0; c < colSize; ++c)
                {
                    ret[r, c] = cv._body[r] * rv._body[c];
                }
            }
            return(ret);
        }
Beispiel #6
0
        public static Matrix CreateAsColumns(params IVector[] vs)
        {
            VectorChecker.IsNotZeroSize(vs[0]);
            int size = vs[0].Size;

            if (vs.Any(v => v.Size != size))
            {
                throw new ArgumentException("jugged vectors");
            }

            int    count = vs.Length;
            Matrix m     = new Matrix(size, count);

            for (int c = 0; c < count; ++c)
            {
                m.Columns[c] = vs[c];
            }
            return(m);
        }
Beispiel #7
0
        public static Matrix CreateAsRows(params IVector[] vs)
        {
            VectorChecker.IsNotZeroSize(vs[0]);
            int size = vs[0].Size;

            if (vs.Any(v => v.Size != size))
            {
                throw new ArgumentException("jugged vectors");
            }

            int    count = vs.Length;
            Matrix m     = new Matrix(count, size);

            for (int r = 0; r < count; ++r)
            {
                m.Rows[r] = vs[r];
            }
            return(m);
        }