public Matrix2DFloat RandomChoice(int count) { if (count <= 0) { return(null); } count = Math.Min(count, Height); var result = new Matrix2DFloat(Width, count); var index = new List <int>(); for (var i = 0; i < Height; i++) { index.Add(i); } var random = new Random(); for (var i = 0; i < Height; i++) { var n = random.Next(Height); var tmp = index[n]; index[n] = index[i]; index[i] = tmp; } for (var i = 0; i < count; i++) { var n = index[i]; for (var x = 0; x < Width; x++) { result[x, i] = this[x, n]; } } return(result); }
public Matrix2DFloat Clone() { var result = new Matrix2DFloat(_Width, _Height); _Data.CopyTo(result._Data, 0); return(result); }
public static Matrix2DFloat operator +(float value1, Matrix2DFloat value2) { var result = new Matrix2DFloat(value2.Width, value2.Height); result.ForEach((x, y) => { result[x, y] = value1 + value2[x, y]; }); return(result); }
public static Matrix2DFloat operator -(Matrix2DFloat value) { var result = new Matrix2DFloat(value.Width, value.Height); result.ForEach((x, y) => { result[x, y] = -value[x, y]; }); return(result); }
public static float Sum(Matrix2DFloat matrix) { float result = 0; matrix.ForEach((x, y) => { result = result + matrix[x, y]; }); return(result); }
public static Matrix2DFloat operator /(Matrix2DFloat value1, float value2) { var result = new Matrix2DFloat(value1.Width, value1.Height); result.ForEach((x, y) => { result[x, y] = value1[x, y] / value2; }); return(result); }
public static Matrix2DFloat operator *(Matrix2DFloat value1, Matrix2DFloat value2) { var width = Math.Max(value1.Width, value2.Width); var height = Math.Max(value1.Height, value2.Height); var result = new Matrix2DFloat(width, height); result.ForEach((x, y) => { result[x, y] = value1[x, y] * value2[x, y]; }); return(result); }
public Matrix2DFloat Equals(Matrix2DFloat value) { if (value == null) { return(null); } var result = new Matrix2DFloat(Width, Height); result.ForEach((x, y) => { result[x, y] = this[x, y] == value[x, y] ? 1 : 0; }); return(result); }
public static Matrix2DFloat operator >=(Matrix2DFloat value1, float value2) { if (value1 == null) { return(null); } var result = new Matrix2DFloat(value1.Width, value1.Height); result.ForEach((x, y) => { result[x, y] = value1[x, y] >= value2 ? 1 : 0; }); return(result); }
public static Matrix2DFloat operator -(Matrix2DFloat value1, Matrix2DFloat value2) { if (value1 == null || value2 == null) { return(null); } var width = Math.Max(value1.Width, value2.Width); var height = Math.Max(value1.Height, value2.Height); var result = new Matrix2DFloat(width, height); result.ForEach((x, y) => { result[x, y] = value1[x, y] - value2[x, y]; }); return(result); }
public Matrix2DFloat Every(Func <float, float, float> predicate, float right) { int width = _Width; int height = _Height; var result = new Matrix2DFloat(width, height); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { result[x, y] = predicate(this[x, y], right); } } return(result); }
public Matrix2DFloat Dot(Matrix2DFloat value) { if (Width != value.Height) { throw new ArgumentException(string.Format( "ValueError: shapes ({0}, {1}) and ({2}, {3}) not aligned", Width, Height, value.Width, value.Height )); } var result = new Matrix2DFloat(value.Width, Height); result.ForEach((x, y) => { float total = 0; int count = Width; for (int i = 0; i < count; i++) { var r = this[i, y] * value[x, i]; total += r; } result[x, y] = total; }); return(result); }