StdStats.java
public final class StdStats
{
private StdStats() { }
public static double max(double[] a)
{
double max = Double.Negative_infinity;
for (int i = 0; i < a.length; i++)
{
if (Double.isNaN(a[i])) return Double.NaN;
if (a[i] > max) max = a[i];
}
return max;
}
public
static double max(double[] a, int lo, int hi)
{
if (lo < 0 || hi >= a.length || lo > hi)
throw new RuntimeException("Subarray indices out of bounds");
double max = Double.Negative_infinity;
for (int i = lo; i <= hi; i++)
{
if (Double.isNaN(a[i])) return Double.NaN;
if (a[i] > max) max = a[i];
}
return max;
}
public static int max(int[] a)
{
int max = Integer.Min_value;
for (int i = 0; i < a.length; i++)
{
if (a[i] > max) max = a[i];
}
return max;
}
public static double min(double[] a)
{
double min = Double.Positive_infinity;
for (int i = 0; i < a.length; i++)
{
if (Double.isNaN(a[i])) return Double.NaN;
if (a[i] < min) min = a[i];
}
return min;
}
public
static double min(double[] a, int lo, int hi)
{
if (lo < 0 || hi >= a.length || lo > hi)
throw new RuntimeException("Subarray indices out of bounds");
double min = Double.Positive_infinity;
for (int i = lo; i <= hi; i++)
{
if (Double.isNaN(a[i])) return Double.NaN;
if (a[i] < min) min = a[i];
}
return min;
}
public static int min(int[] a)
{
int min = Integer.Max_value;
for (int i = 0; i < a.length; i++)
{
if (a[i] < min) min = a[i];
}
return min;
}
public static double mean(double[] a)
{
if (a.length == 0) return Double.NaN;
double sum = sum(a);
return sum / a.lengt
}
public
static double mean(double[] a, int lo, int hi)
{
int length = hi - lo + 1;
if (lo < 0 || hi >= a.length || lo > hi)
throw new RuntimeException("Subarray indices out of bounds");
if (length == 0) return Double.NaN;
double sum = sum(a, lo, hi);
return sum / length;
}
public static double mean(int[] a)
{
if (a.length == 0) return Double.NaN;
double sum = 0.0;
for (int i = 0; i < a.length; i++)
{
sum = sum + a[i];
}
return sum / a.length;
}
public static double var(double[] a)
{
if (a.length == 0) return Double.NaN;
double avg = mean(a);
double sum = 0.0;
for (int i = 0; i < a.length; i++)
{
sum += (a[i] - avg) * (a[i] - avg);
}
return sum / (a.length - 1);
}
public static double var(double[] a, int lo,
int hi)
{
int length = hi - lo + 1;
if (lo < 0 || hi >= a.length || lo > hi)
throw new RuntimeException("Subarray
indices out of bounds");
if (length == 0) return Double.NaN;
double avg = mean(a, lo, hi);
double sum = 0.0;
for (int i = lo; i <= hi; i++)
{
sum += (a[i] - avg) * (a[i] - avg);
}
return sum / (length - 1);
}
public static double var(int[] a)
{
if (a.length == 0) return Double.NaN;
double avg = mean(a);
double sum = 0.0;
for (int i = 0; i < a.length; i++)
{
sum += (a[i] - avg) * (a[i] - avg);
}
return sum / (a.length - 1);
}
public static double
varp(double[] a)
{
if (a.length == 0) return Double.NaN;
double avg = mean(a);
double sum = 0.0;
for (int i = 0; i < a.length; i++)
{
sum += (a[i] - avg) * (a[i] - avg);
}
return sum / a.length;
}
public static double varp(double[] a, int lo, int hi)
{
int length = hi - lo + 1;
if (lo < 0 || hi >= a.length || lo > hi)
throw new RuntimeException("Subarray indices out of bounds");
if (length == 0) return Double.NaN;
double avg = mean(a, lo, hi);
double sum = 0.0;
for (int i = lo; i <= hi; i++) {
sum += (a[i] - avg) * (a[i] - avg);
}
return sum / length;
}
public static double stddev(double[] a)
{
return Math.sqrt(var(a));
}
public static double stddev(double[] a, int lo, int hi)
{
return Math.sqrt(var(a, lo, hi));
}
public static double stddev(int[] a)
{
return Math.sqrt(var(a));
}
public static double stddevp(double[] a)
{
return Math.sqrt(varp(a));
}
public static double stddevp(double[] a, int
lo, int hi)
{
return Math.sqrt(varp(a, lo, hi));
}
public static double sum(double[] a)
{
double sum = 0.0;
for (int i = 0; i < a.length; i++)
{
sum += a[i];
}
return sum;
}
public
static double sum(double[] a, int lo, int hi)
{
if (lo < 0 || hi >= a.length || lo > hi)
throw new RuntimeException("Subarray indices out of bounds");
double sum = 0.0;
for (int i = lo; i <= hi; i++)
{
sum += a[i];
}
return sum;
}
public static int sum(int[] a)
{
int sum = 0;
for (int i = 0; i < a.length; i++)
{
sum += a[i];
}
return sum;
}
public static void plotPoints(double[] a)
{
int N = a.length;
StdDraw.setXscale(0, N-1);
StdDraw.setPenRadius(1.0 / (3.0 * N));
for (int i = 0; i < N; i++)
{
StdDraw.point(i, a[i]);
}
}
public static void plotLines(double[] a)
{
int N = a.length;
StdDraw.setXscale(0, N-1);
StdDraw.setPenRadius();
for (int i = 1; i < N; i++)
{
StdDraw.line(i-1, a[i-1], i, a[i]);
}
}
public static void plotBars(double[] a)
{
int N = a.length;
StdDraw.setXscale(0, N-1);
for (int i = 0; i < N; i++)
{
StdDraw.filledRectangle(i, a[i]/2, .25,
a[i]/2);
}
}
public static void main(String[] args)
{
double[] a = StdArrayIO.readDouble1D();
StdOut.printf(" min %10.3f\n", min(a));
StdOut.printf(" mean %10.3f\n", mean(a));
StdOut.printf(" max %10.3f\n", max(a));
StdOut.printf(" sum %10.3f\n", sum(a));
StdOut.printf(" stddev %10.3f\n", stddev(a));
StdOut.printf(" var %10.3f\n", var(a));
StdOut.printf(" stddevp %10.3f\n", stddevp(a));
StdOut.printf(" varp %10.3f\n", varp(a));
}
}
No comments:
Post a Comment