diff --git a/Apewer/NumberUtility.cs b/Apewer/NumberUtility.cs index 03b3faa..f74cf6a 100644 --- a/Apewer/NumberUtility.cs +++ b/Apewer/NumberUtility.cs @@ -187,38 +187,155 @@ namespace Apewer #endregion - #region 平均值 + #region 求和 - /// 平均值。 - public static float Average(params float[] values) + /// 求和。 + public static int Sum(params byte[] values) { - if (values == null) return 0F; + if (values == null) return 0; - var amount = 0F; - foreach (var i in values) amount += i; - return amount / values.Length; + var result = 0; + foreach (var i in values) result += i; + return result; } - /// 平均值。 - public static double Average(params double[] values) + /// 求和。 + public static int Sum(params short[] values) { - if (values == null) return 0D; + if (values == null) return 0; - var amount = 0D; - foreach (var i in values) amount += i; - return amount / Convert.ToDouble(values.Length); + var result = 0; + foreach (var i in values) result += i; + return result; } - /// 平均值。 - public static decimal Average(params decimal[] values) + /// 求和。 + public static int Sum(params int[] values) { - if (values == null) return 0M; + if (values == null) return 0; - var amount = 0M; - foreach (var i in values) amount += i; - return amount / Convert.ToDecimal(values.Length); + var result = 0; + foreach (var i in values) result += i; + return result; } + /// 求和。 + public static long Sum(params long[] values) + { + if (values == null) return 0; + + var result = 0L; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static int Sum(params sbyte[] values) + { + if (values == null) return 0; + + var result = 0; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static int Sum(params ushort[] values) + { + if (values == null) return 0; + + var result = 0; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static uint Sum(params uint[] values) + { + if (values == null) return 0; + + var result = 0U; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static ulong Sum(params ulong[] values) + { + if (values == null) return 0; + + var result = 0UL; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static float Sum(params float[] values) + { + if (values == null) return 0; + + var result = 0F; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static double Sum(params double[] values) + { + if (values == null) return 0; + + var result = 0D; + foreach (var i in values) result += i; + return result; + } + + /// 求和。 + public static decimal Sum(params decimal[] values) + { + if (values == null) return 0; + + var result = 0M; + foreach (var i in values) result += i; + return result; + } + + #endregion + + #region 平均值 + + /// 平均值。 + public static double Average(params byte[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params short[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params int[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params long[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params sbyte[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params ushort[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params uint[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static double Average(params ulong[] values) => values.IsEmpty() ? 0 : (Sum(values) / Convert.ToDouble(values.Length)); + + /// 平均值。 + public static float Average(params float[] values) => values.IsEmpty() ? 0 : (Sum(values) / values.Length); + + /// 平均值。 + public static double Average(params double[] values) => values.IsEmpty() ? 0 : (Sum(values) / values.Length); + + /// 平均值。 + public static decimal Average(params decimal[] values) => values.IsEmpty() ? 0 : (Sum(values) / values.Length); + #endregion #region 标准差 @@ -432,7 +549,7 @@ namespace Apewer #endregion - #region 最小值、最大值、极差 + #region 最小值 private static T Most(Func replace, T[] values) { @@ -463,12 +580,27 @@ namespace Apewer /// 最小值。 public static byte Min(params byte[] values) => Most((a, b) => a > b, values); + /// 最小值。 + public static short Min(params short[] values) => Most((a, b) => a > b, values); + /// 最小值。 public static int Min(params int[] values) => Most((a, b) => a > b, values); /// 最小值。 public static long Min(params long[] values) => Most((a, b) => a > b, values); + /// 最小值。 + public static sbyte Min(params sbyte[] values) => Most((a, b) => a > b, values); + + /// 最小值。 + public static ushort Min(params ushort[] values) => Most((a, b) => a > b, values); + + /// 最小值。 + public static uint Min(params uint[] values) => Most((a, b) => a > b, values); + + /// 最小值。 + public static ulong Min(params ulong[] values) => Most((a, b) => a > b, values); + /// 最小值。 public static float Min(params float[] values) => Most((a, b) => a > b, values); @@ -478,15 +610,34 @@ namespace Apewer /// 最小值。 public static decimal Min(params decimal[] values) => Most((a, b) => a > b, values); + #endregion + + #region 最大值 + /// 最大值。 public static byte Max(params byte[] values) => Most((a, b) => a < b, values); + /// 最大值。 + public static short Max(params short[] values) => Most((a, b) => a < b, values); + /// 最大值。 public static int Max(params int[] values) => Most((a, b) => a < b, values); /// 最大值。 public static long Max(params long[] values) => Most((a, b) => a < b, values); + /// 最大值。 + public static sbyte Max(params sbyte[] values) => Most((a, b) => a < b, values); + + /// 最大值。 + public static ushort Max(params ushort[] values) => Most((a, b) => a < b, values); + + /// 最大值。 + public static uint Max(params uint[] values) => Most((a, b) => a < b, values); + + /// 最大值。 + public static ulong Max(params ulong[] values) => Most((a, b) => a < b, values); + /// 最大值。 public static float Max(params float[] values) => Most((a, b) => a < b, values); @@ -496,6 +647,10 @@ namespace Apewer /// 最大值。 public static decimal Max(params decimal[] values) => Most((a, b) => a < b, values); + #endregion + + #region 极差 + /// 极差。 public static int Range(params int[] values) => Max(values) - Min(values); @@ -513,14 +668,10 @@ namespace Apewer #endregion + #region 相关性 + /// Pearson Correlation Coefficient 皮尔逊相关系数。计算两个数组的相似度。数组长度不相等时,以 0 填充不足的长度。 - /// - /// 0.8 ~ 1.0 : 极强相关 - /// 0.6 ~ 0.8 : 强相关 - /// 0.4 ~ 0.6 : 中等程度相关 - /// 0.2 ~ 0.4 : 弱相关 - /// 0.0 ~ 0.2 : 极弱相关或无相关 - /// + /// 0.8 ~ 1.0 : 极强相关
0.6 ~ 0.8 : 强相关
0.4 ~ 0.6 : 中等程度相关
0.2 ~ 0.4 : 弱相关
0.0 ~ 0.2 : 极弱相关或无相关
/// public static double Pearson(double[] bytes1, double[] bytes2) { @@ -554,6 +705,8 @@ namespace Apewer return r; } + #endregion + #region 从 String 转为数值。 // 修剪数值字符串。