Files
SuperVPN/output/Libraries/AForge.Math/AForge/Math/Statistics.cs
2025-10-09 09:57:24 +09:00

143 lines
2.3 KiB
C#

using System;
namespace AForge.Math;
public static class Statistics
{
public static double Mean(int[] values)
{
long num = 0L;
double num2 = 0.0;
int i = 0;
for (int num3 = values.Length; i < num3; i++)
{
int num4 = values[i];
num2 += (double)(i * num4);
num += num4;
}
if (num != 0)
{
return num2 / (double)num;
}
return 0.0;
}
public static double StdDev(int[] values)
{
return StdDev(values, Mean(values));
}
public static double StdDev(int[] values, double mean)
{
double num = 0.0;
int num2 = 0;
int i = 0;
for (int num3 = values.Length; i < num3; i++)
{
int num4 = values[i];
double num5 = (double)i - mean;
num += num5 * num5 * (double)num4;
num2 += num4;
}
if (num2 != 0)
{
return System.Math.Sqrt(num / (double)num2);
}
return 0.0;
}
public static int Median(int[] values)
{
int num = 0;
int num2 = values.Length;
for (int i = 0; i < num2; i++)
{
num += values[i];
}
int num3 = num / 2;
int j = 0;
int num4 = 0;
for (; j < num2; j++)
{
num4 += values[j];
if (num4 >= num3)
{
break;
}
}
return j;
}
public static IntRange GetRange(int[] values, double percent)
{
int num = 0;
int num2 = values.Length;
for (int i = 0; i < num2; i++)
{
num += values[i];
}
int num3 = (int)((double)num * (percent + (1.0 - percent) / 2.0));
int j = 0;
int num4 = num;
for (; j < num2; j++)
{
num4 -= values[j];
if (num4 < num3)
{
break;
}
}
int num5 = num2 - 1;
num4 = num;
while (num5 >= 0)
{
num4 -= values[num5];
if (num4 < num3)
{
break;
}
num5--;
}
return new IntRange(j, num5);
}
public static double Entropy(int[] values)
{
int num = values.Length;
int num2 = 0;
double num3 = 0.0;
for (int i = 0; i < num; i++)
{
num2 += values[i];
}
if (num2 != 0)
{
for (int j = 0; j < num; j++)
{
double num4 = (double)values[j] / (double)num2;
if (num4 != 0.0)
{
num3 += (0.0 - num4) * System.Math.Log(num4, 2.0);
}
}
}
return num3;
}
public static int Mode(int[] values)
{
int result = 0;
int num = 0;
int i = 0;
for (int num2 = values.Length; i < num2; i++)
{
if (values[i] > num)
{
num = values[i];
result = i;
}
}
return result;
}
}