/// <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); }
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); }
/// <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]; } }
/// <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]; } }
/// <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); }
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); }
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); }