//----------------------------------------------------------------- public static DenseMatrix[] Init2D(float value = 0) { return(new DenseMatrix[] { MatrixFactory.Init(value), MatrixFactory.Init(value), }); }
public static DenseMatrix ApplyDeviations(this DenseMatrix V, DenseMatrix[] dev, DenseMatrix defaultValues) { DenseMatrix V2 = MatrixFactory.Init(float.MinValue); for (int r = 0; r < V.RowCount; r++) { for (int c = 0; c < V.ColumnCount; c++) { int dr = 0, dc = 0; dc = dev[Direction.C][r, c].Round(); dr = dev[Direction.R][r, c].Round(); var adjIdx = V.GetAdjustedIndexes(r, c, dr, dc); int c2 = adjIdx[Direction.C]; int r2 = adjIdx[Direction.R]; if (r2 < V.RowCount && c2 < V.ColumnCount) { V2[r2, c2] = V[r, c]; } } } // Compensation: Cover the areas yet not affected by deviations for (int r = 0; r < V.RowCount; r++) { for (int c = 0; c < V.ColumnCount; c++) { if (V2[r, c] == float.MinValue) { if (defaultValues != null) { V2[r, c] = defaultValues[r, c]; } else { V2[r, c] = V[r, c]; } } } } return(V2); }
// ----------------------- public static DenseMatrix ApplyDeviations(this DenseMatrix V, DenseMatrix[] dev, float defaultValue) { DenseMatrix defaultValues = MatrixFactory.Init(defaultValue); return(V.ApplyDeviations(dev, defaultValues)); }