在中有一个类平均值。我希望避免每次计算平均值时实例化一个对象。经过进一步的检查,我发现了一个类StatUtils,它有一个静态函数来计算double[]的平均值。现在我要计算高斯函数。我发现了一个高斯类。但是,我仍然不希望每次要计算函数时都实例化一个对象。是否有类似于静态函数的StatUtils类来计算高斯函数。
我考虑过实例化一个类型为Mean的全局对象,以获得对mean的访问,而不必实例化多个Mean对象,但是当我找到StatUtil时,我更喜欢这种方法。对于高斯问题,即使是全局对象也是不可接受的,因为构造函数需要平均值和σ参数。因此,我仍然需要为每个发行版实例化一个新对象。
我要找的是:
双y=高斯(x,平均值,σ);
总结一下。
发布于 2014-03-27 16:08:39
只要您不需要与原始类相关联的带有导数和参数的基础结构,就可以提取相关的计算(它不包含任何真实的“状态”,而只依赖于您提到的三个参数),并将其放置到一个静态方法中。
根据原始的高斯类,它应该大致如下所示:
// Based on the Gaussian class from Apache Commons Math
public static double gaussian(double x, double mean, double sigma)
{
double norm = 1 / (sigma * Math.sqrt(2 * Math.PI));
double is = 1 / sigma;
double i2s2 = 0.5 * is * is;
double xMinusMean = x - mean;
return norm * Math.exp(-xMinusMean * xMinusMean * i2s2);
}发布于 2014-04-05 08:19:12
你想要概率密度函数PDF还是累积密度函数CDF。PDF由@Marco13 13的答案提供。在大多数统计应用中,CDF是最有趣的,它发现x的概率。
您可以做的是有一个org.apache.commons.math3.distribution.NormalDistribution实例,它意味着0和标准差1。
static NormalDistribution dist = new NormalDistribution();
static double density(double x, double mean, double sd) {
double scaledx = (x-mean)/sd;
return dist.density(scaledx);
}
static double cumulativeProbability(double x, double mean, double sd) {
double scaledx = (x-mean)/sd;
return dist.cumulativeProbability(scaledx);
}https://stackoverflow.com/questions/22691690
复制相似问题