Пример #1
0
        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);
        }
Пример #2
0
        public Matrix2DFloat Clone()
        {
            var result = new Matrix2DFloat(_Width, _Height);

            _Data.CopyTo(result._Data, 0);
            return(result);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        public static float Sum(Matrix2DFloat matrix)
        {
            float result = 0;

            matrix.ForEach((x, y) => {
                result = result + matrix[x, y];
            });
            return(result);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
        }