Exemple #1
0
        /// <summary>
        ///     Returns the largest value of the <paramref name="ndArray"/>.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ndArray"></param>
        /// <returns></returns>
        public static T Max <T>(this INdArray <T> ndArray)
        {
            var len = ndArray.Shape.TotalLength;

            Guard.AssertOperation(len > 0, "ndArray has no elements.");

            var max = ndArray.GetItem(0);

            for (var i = 1; i < len; ++i)
            {
                var current = ndArray.GetItem(i);
                if (ValueTrait.GreaterThan(current, max))
                {
                    max = current;
                }
            }
            return(max);
        }
        /// <summary>
        ///     Computes sum from all elements of the <paramref name="ndArray"/>.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ndArray"></param>
        /// <returns></returns>
        public static T Sum <T>(this INdArray <T> ndArray)
        {
            var value = ValueTrait.Zero <T>();
            var len   = ndArray.Shape.TotalLength;

            for (var i = 0; i < len; ++i)
            {
                value = ValueTrait.Add(value, ndArray.GetItem(i));
            }
            return(value);
        }
Exemple #3
0
        /// <summary>
        ///     Returns the index of the smallest value of the <paramref name="ndArray"/>.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ndArray"></param>
        /// <returns></returns>
        public static IndexArray ArgMin <T>(this INdArray <T> ndArray)
        {
            var len = ndArray.Shape.TotalLength;

            Guard.AssertOperation(len > 0, "ndArray has no elements.");

            var argmin = 0;
            var min    = ndArray.GetItem(0);

            for (var i = 1; i < len; ++i)
            {
                var current = ndArray.GetItem(i);
                if (ValueTrait.LessThan(current, min))
                {
                    argmin = i;
                    min    = current;
                }
            }
            return(ndArray.ToShapedIndices(argmin));
        }
Exemple #4
0
        /// <summary>
        ///     Computes unbiased variance from all elements of the <paramref name="ndArray"/>.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ndArray"></param>
        /// <returns></returns>
        public static T UnbiasedVar <T>(this INdArray <T> ndArray)
        {
            var value = ValueTrait.Zero <T>();
            var mean  = ndArray.Mean();
            var len   = ndArray.Shape.TotalLength;

            for (var i = 0; i < len; ++i)
            {
                var temp = ValueTrait.Subtract(ndArray.GetItem(i), mean);
                value = ValueTrait.Multiply(temp, temp);
            }
            return(ValueTrait.Divide(value, ValueTrait.FromLong <T>(len - 1)));
        }
        /// <summary>
        ///     [Pure] Returns the 2-D norm of all elements of <paramref name="ndArray"/>.
        /// </summary>
        /// <param name="ndArray"></param>
        /// <returns></returns>
        public static T Norm2 <T>(this INdArray <T> ndArray)
        {
            var len = ndArray.Shape.TotalLength;

            Guard.AssertOperation(len > 0, "ndArray has no elements.");

            var norm = ValueTrait.Zero <T>();

            for (var i = 0; i < len; ++i)
            {
                var element = ndArray.GetItem(i);
                norm = ValueTrait.Add(norm, ValueTrait.Multiply(element, element));
            }

            return(NdMath.Sqrt(norm));
        }