Esempio n. 1
0
        /// <summary>
        /// 各ベクトルの相関を求める.
        /// </summary>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public static Matrix Correlate(Matrix X, Matrix Y, Target target)
        {
            MatrixChecker.SizeEquals(X, Y);
            Matrix ret = null;

            if (target == Target.EachRow)
            {
                ret = new Matrix(X.RowSize, X.RowSize);
                for (int ry = 0; ry < ret.RowSize; ++ry)
                {
                    for (int rx = 0; rx < ret.ColumnSize; ++rx)
                    {
                        ret[ry, rx] = Correlate(Y.Rows[ry], X.Rows[rx]);
                    }
                }
            }
            else
            {
                ret = new Matrix(X.ColumnSize, X.ColumnSize);
                for (int cy = 0; cy < ret.RowSize; ++cy)
                {
                    for (int cx = 0; cx < ret.ColumnSize; ++cx)
                    {
                        ret[cy, cx] = Correlate(Y.Columns[cy], X.Columns[cx]);
                    }
                }
            }
            return(ret);
        }
Esempio n. 2
0
 /// <summary>
 /// Matrixオブジェクトを直接減算する.
 /// <code>this -= m;</code> を表しているが,代入演算子のように結果オブジェクトが生成されることはない.
 /// </summary>
 /// <param name="m">減算するMatrixオブジェクト</param>
 /// <returns>減算後の自身への参照</returns>
 /// <exception cref="Exception.MismatchSizeException">
 /// 行列のサイズが一致しなかった場合に throw される.
 /// </exception>
 public Matrix Sub(Matrix m)
 {
     MatrixChecker.SizeEquals(this, m);
     for (int i = 0; i < this._body.Length; ++i)
     {
         this._body[i] -= m._body[i];
     }
     return(this);
 }