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