示例#1
0
        // Vectorとの統一感がないので保留
        ///// <summary>
        ///// 部分行列を作成する.
        ///// </summary>
        ///// <param name="beginRow">開始行</param>
        ///// <param name="beginColumn">開始列</param>
        ///// <param name="countRow">抽出する行数</param>
        ///// <param name="countColumn">抽出する列数</param>
        ///// <returns>部分行列</returns>
        //public Matrix Submatrix(int beginRow, int beginColumn, int countRow, int countColumn)
        //{
        //    if (beginRow < 0 || this.RowSize <= beginRow || beginColumn < 0 || this.ColumnSize <= beginColumn)
        //    {
        //        throw new IndexOutOfRangeException();
        //    }
        //
        //    Matrix ret = new Matrix(countRow, countColumn);
        //    for (int r = 0; r < countRow; ++r)
        //    {
        //        for (int c = 0; c < countColumn; ++c)
        //        {
        //            ret[r, c] = this[beginRow + r, beginColumn + c];
        //        }
        //    }
        //    return ret;
        //}

        #region  換出力

        /// <summary>
        /// 行列の各行を<see cref="RowVector"/>の配列として出力する.
        /// </summary>
        /// <returns><see cref="RowVector"/>の配列</returns>
        public RowVector[] ToRowVectors()
        {
            RowVector[] ret = new RowVector[this.RowSize];
            for (int r = 0; r < this.RowSize; ++r)
            {
                ret[r] = new RowVector(this.Rows[r]);
            }
            return(ret);
        }
 public static void CanMultiply(RowVector rv, Matrix m)
 {
     if (rv.Size != m.RowSize)
     {
         throw new Exception.CannotMultiplyException(
             "Matrix.RowSize=" + m.RowSize + ", Matrix.ColumnSize=" + m.ColumnSize +
             ", RowVector.Size=" + rv.Size);
     }
 }
示例#3
0
        /// <summary>
        /// 行ベクトルと行列の乗算
        /// </summary>
        /// <param name="rv">行ベクトル</param>
        /// <param name="m">行列</param>
        /// <returns>乗算結果の行ベクトル</returns>
        public static RowVector operator *(RowVector rv, Matrix m)
        {
            MatrixChecker.CanMultiply(rv, m);
            RowVector ret = new RowVector();

            clapack.Function.dgemv(ref ret._body, rv._body, m._body, m._rsize, m._csize);

            return(ret);
        }
示例#4
0
        /// <summary>
        /// 行ベクトルと行列の乗算
        /// </summary>
        /// <param name="rv">行ベクトル</param>
        /// <param name="m">行列</param>
        /// <returns>乗算結果の行ベクトル</returns>
        public static RowVector operator *(RowVector rv, Matrix m)
        {
            MatrixChecker.CanMultiply(rv, m);
            RowVector ret = new RowVector();

            krdlab.law.func.dgemv(ref ret._body, rv._body, m._body, m._rsize, m._csize);

            return(ret);
        }
示例#5
0
 public static void CanMultiply(RowVector rv, Matrix m)
 {
     if (rv.Size != m.RowSize)
     {
         throw new ArgumentException(
                   "Matrix.RowSize=" + m.RowSize + ", Matrix.ColumnSize=" + m.ColumnSize +
                   ", RowVector.Size=" + rv.Size);
     }
 }
示例#6
0
        public void Test_Combination()
        {
            RowVector rv = new RowVector(1, 2, 3);
            ColumnVector cv = new ColumnVector(1, 2, 3);

            Assert.That(rv * cv, Is.EqualTo(14).Within(Ep));
            Assert.That(cv * rv, Is.EqualTo(
                new Matrix(new [,] {
                    { 1.0, 2, 3 },
                    { 2, 4, 6 },
                    { 3, 6, 9 }
                })
                ).Within(Ep)
            );
        }
示例#7
0
        public void Test_VectorOperator()
        {
            Matrix A;
            A = new Matrix(new double[,]{
                { 5,  3 },
                { 2, -1 },
                { 4,  2 },
            });

            ColumnVector cv = new ColumnVector(-1, 1);
            ColumnVector Yc = A * cv;
            Assert.AreEqual(new ColumnVector(-2, -3, -2), Yc);

            RowVector rv = new RowVector(-2, 0, 1);
            RowVector Yr = rv * A;
            Assert.AreEqual(new RowVector(-6, -4), Yr);
        }
示例#8
0
        public void Test_Vector_RowVector_Operator()
        {
            // Vector ��������ƁC�S�� Vector �ɂȂ� (���ۂɂȂ�)
            Vector l = new Vector(1, 1, 1);
            Vector r = new Vector(1, 1, 1);
            RowVector rv = new RowVector(1, 1, 1);

            Vector add = l + rv;
            Assert.That(add, Is.Not.InstanceOf(typeof(RowVector)));
            Assert.True(Vector.Equals(add, new Vector(2, 2, 2), Ep));
            add = rv + r;
            Assert.That(add, Is.Not.InstanceOf(typeof(RowVector)));
            Assert.True(Vector.Equals(add, new Vector(2, 2, 2), Ep));

            Vector sub = l - rv;
            Assert.That(sub, Is.Not.InstanceOf(typeof(RowVector)));
            Assert.True(Vector.Equals(sub, new Vector(0, 0, 0), Ep));
            sub = rv - r;
            Assert.That(sub, Is.Not.InstanceOf(typeof(RowVector)));
            Assert.True(Vector.Equals(sub, new Vector(0, 0, 0), Ep));
        }
示例#9
0
        public void Test_RowVector_Operator()
        {
            RowVector l = new RowVector(1, 1, 1);
            RowVector r = new RowVector(1, 1, 1);

            RowVector add = l + r;
            Assert.True(RowVector.Equals(add, new RowVector(2, 2, 2), Ep));

            RowVector sub = l - r;
            Assert.True(RowVector.Equals(sub, new RowVector(0, 0, 0), Ep));

            RowVector mul = l * 2;
            Assert.True(RowVector.Equals(mul, new RowVector(2, 2, 2), Ep));

            RowVector mur = 2 * r;
            Assert.True(RowVector.Equals(mur, new RowVector(2, 2, 2), Ep));

            RowVector div = l / 2;
            Assert.True(RowVector.Equals(div, new RowVector(0.5, 0.5, 0.5), Ep));
        }
示例#10
0
        public void Test_Equals()
        {
            Vector v = new Vector(1, 2, 3);
            RowVector rv = new RowVector(1, 2, 3);
            ColumnVector cv = new ColumnVector(1, 2, 3);

            // Vector.Equals �̓N���X�̋�ʂ���Ȃ�
            Assert.True(Vector.Equals(v, v, Ep));
            Assert.True(Vector.Equals(v, rv, Ep));
            Assert.True(Vector.Equals(v, cv, Ep));

            //// RowVector.Equals �� RowVector ���m�̔�r�̂�
            //Assert.False(RowVector.Equals(rv, v, Ep));
            //Assert.True(RowVector.Equals(rv, rv, Ep));
            //Assert.False(RowVector.Equals(rv, cv, Ep));

            //// ColumnVector.Equals �� ColumnVector ���m�̔�r�̂�
            //Assert.False(ColumnVector.Equals(cv, v, Ep));
            //Assert.False(ColumnVector.Equals(cv, rv, Ep));
            //Assert.True(ColumnVector.Equals(cv, cv, Ep));
        }
示例#11
0
 /// <summary>
 /// 標準化された<see cref="RowVector"/>を作成する.
 /// </summary>
 /// <param name="vector">標準化される<see cref="RowVector"/>(実際は,この引数のコピーが標準化される)</param>
 /// <param name="varType">標準化に使用する分散の種類</param>
 /// <returns>標準化された<see cref="RowVector"/></returns>
 ///
 /// <exception cref="Exception.ValueIsLessThanLimitException">
 /// 標準偏差値が設定されている精度の下限値未満の場合にthrowされる.
 /// </exception>
 public static RowVector Standardize(RowVector vector, VarianceType varType)
 {
     return(_Standardize_T(new RowVector(vector), varType));
 }